Я хочу отправить файлы из двух приложений NodeJS: App1 и App2.App1 отправляет файл в App2.Если я использую простой POST и GET, все работает нормально.Проблемы возникают, когда я использую multipart для отправки файла.
С App1 я хочу отправить файл JSON в App2.Итак, я написал API в App2 для прослушивания POST с файлами:
Код, используемый в App2 для получения файлов:
httpServer.post('/file', function (req, res) {
log.yellow("HTTP file received");
res.send('Thank you!');
res.end();
let form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
log.red(err);
log.yellow(fields);
log.cyan(files);
});
});
Итак, в App1 я использую request.js для создания HTTPЗапросы.Прежде чем написать функцию, которая отправляет данные, я тестирую API приложения 2 с помощью Postman следующим образом:
или: https://imgur.com/rDWmY2K
Таким образом, я использовал Postman для генерации кода для request.js, который выглядит так:
Код, используемый в App1 для отправки файла:
function sendFileToCompanyX(path) {
var fs = require("fs");
var request = require("request");
var options = { method: 'POST',
url: 'http://localhost:8000/file',
headers:
{
'cache-control': 'no-cache',
'Access-Control-Allow-Headers': 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, Accept-Encoding, X-GitHub-OTP, X-Requested-With, User-Agent',
'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
formData:
{ 'printLogFile':
{ value: fs.createReadStream("/Users/sahelanthropus/IdeaProjects/ThesisPrototype/ManufacturerApp/logs/data.json"),
options:
{ filename: '/Users/sahelanthropus/IdeaProjects/ThesisPrototype/ManufacturerApp/logs/data.json',
contentType: null } } } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
}
Итак, используя Postman, я могу получитьфайл в App2 и обработать его.Но если я использую App1 для отправки (того же самого) файла, App2 может перехватить POST, но form.parse(..., cb)
никогда не вызывает обратный вызов (ни для err , полей и files ).
Я использовал Wireshark для сравнения данных, отправляемых из Postman и App1, они одинаковы в элементе HTTP, но я заметил, что Postman использует IPv6, а мои пакеты приложений используют IPv4.