У меня возникает проблема, описанная ниже, когда я нажимаю на API загрузки файла из пользовательского интерфейса. Я нажимаю API узла js из реакции js, а затем нажимаю общедоступный API из узла js.

node version:- 10.15.3
npm version:- 6.4.1
router.route("/uploadLocaleFile").post(function(req, res, next) {
req.on("data", data => {
uploadFile(req, data, res);
});
});
function uploadFile(req, data, res) {
request
.post({
uri: `${notebookPath}/localfile/${req.query.experimentId}`,
body: data,
headers: {
"Content-Type": req.headers["content-type"],
Authorization: req.headers["authorization"]
}
})
.pipe(res);
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте этот код
router.route("/uploadLocaleFile").post(function(req, res, next) {
const chunks = [];
req
.on('data', data => chunks.push(data))
.on("end", _ => uploadFile(req, Buffer.concat(chunks), res)
;
});
function uploadFile(req, data, res) {
request
.post({
uri: `${notebookPath}/localfile/${req.query.experimentId}`,
body: data,
headers: {
"Content-Type": req.headers["content-type"],
Authorization: req.headers["authorization"]
}
})
.pipe(res);
}
Вы можете попробовать решение @Yaroslav Gaponov.
Ваша проблема заключалась в том, что .pipe(res) срабатывает при каждом data событии. К тому времени, когда произойдет ваше второе событие data, поток res уже закрыт.
Что сделал @Ярослав Гапонов, так это то, что при каждом событии data он сохраняет входящий буфер в массив. Когда поток завершится, будет сгенерировано событие end, и только после этого вам будет разрешено сделать 1 запись в res, то есть .pipe(res) из загрузить файл.
Вы также можете попробовать request один линейный канал следующим образом:
req.pipe(request(your_options)).pipe(res)
Для текстового файла он работает, но файл json aur js выдает ошибку.