Я получаю ERR_STREAM_WRITE_AFTER_END в узле js api. Как исправить эту проблему? - PullRequest
0 голосов
/ 03 июня 2019

Я получаю проблему, которая описана ниже, когда я нажимаю api для загрузки файла из пользовательского интерфейса.Я попал в узел js api из реагировать js, а затем ударил общедоступный api из узла js.enter image description here

версия узла: - 10.15.3

версия npm: - 6.4.1

API

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);
}

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Попробуйте этот код

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);
}
1 голос
/ 03 июня 2019

Возможно, вы захотите попробовать решение Ярослава Гапонова.

Ваша проблема заключалась в том, что .pipe(res) запускается при каждом data событии. К тому времени, когда происходит ваше второе data событие, поток res уже закрыт.

Ярослав Гапонов сделал то, что при каждом событии data он сохранял входящий буфер в массив. Когда поток будет завершен, событие end будет запущено, и только тогда вам будет разрешено сделать 1 запись в res, то есть .pipe(res) из uploadFile .

Вы также можете попробовать request однолинейную трубу, например:

req.pipe (запрос (your_options)). Труб (RES) * * 1 021

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...