Я создаю NodeJS API
с помощью Express, где при создании POST
он генерирует файл TAR
на основе тела запроса.
Проблема:
Когда конечной точкой является POST
, у меня есть доступ к телу запроса, и, похоже, я могу что-то сделать с ним.Но я не вижу / не использую / не проверяю сжатый файл из этого (насколько я могу судить).
Когда конечной точкой является GET
, у меня нет доступа к телузапрос (насколько я могу судить), но я могу запросить URL в браузере и получить сжатый файл.
По сути, я хочу решить один из «насколько я могу судить.Это мой соответствующий код:
const fs = require('fs');
const serverless = require('serverless-http');
const archiver = require('archiver');
const express = require('express');
const app = express();
const util = require('util');
app.use(express.json());
app.post('/', function(req, res) {
var filename = 'export.tar';
var output = fs.createWriteStream('/tmp/' + filename);
output.on('close', function() {
res.download('/tmp/' + filename, filename);
});
var archive = archiver('tar');
archive.pipe(output);
// This part does not work when this is a GET request.
// The log works perfectly in a POST request, but I can't get the TAR file from the command line.
res.req.body.files.forEach(file => {
archive.append(file.content, { name: file.name });
console.log(`Appending ${file.name} file: ${JSON.stringify(file, null, 2)}`);
});
// This part is dummy data that works with a GET request when I go to the URL in the browser
archive.append(
"<h1>Hello, World!</h1>",
{ name: 'index.html' }
);
archive.finalize();
});
Пример данных тела JSON, которые я отправляю по этому адресу:
{
"title": "Sample Title",
"files": [
{
"name": "index.html",
"content": "<p>Hello, World!</p>"
},
{
"name": "README.md",
"content": "# Hello, World!"
}
]
}
Я просто должен отправить JSON
и получить TARна основании SON
.POST
неправильный метод для этого?Если я использую GET
, что должно измениться, чтобы я мог использовать эти JSON
данные?Есть ли способ «гирляндной цепочки» запросов (это кажется нечистым, но может быть решением)?