ERR_EMPTY_RESPONSE при загрузке нескольких файлов с помощью node.js

Я пытаюсь загрузить несколько файлов на ftp, используя node.js. Моя загрузка начинается успешно, и я вижу файл, загруженный на сервер, но через некоторое время не получаю сообщение об успешном завершении, в конце браузера я получаю эту ошибку «Ошибка 324 (net:: ERR_EMPTY_RESPONSE): но на сервере мои файлы все еще заливаю на фтп.

Вот журнал загрузки для процесса:

uploaded Audio >>1 >>1572528
uploaded Audio >>1 >>1637949
uploaded Audio >>1 >>1703388
uploaded Audio >>1 >>1768865
uploaded Audio >>1 >>1834167
PUT /user/album/deliverAudio - - ms - -   
               // as soon as this line execute I get EMPTY_RESPONSE_ERROR in browser
uploaded Audio >>1 >>1899552

Ниже приведен частичный код процесса:

sync.map(req.body.tracks, function(track, callback) {
    var data = '';
    var filename = '';
    var readableAudioStream = fs.createReadStream(track.trackpath.track_path);
    c.put(readableAudioStream,track.filename, function(err) {
      if (err) {
        return callback(err);
      }
      callback(null);
    });
    readableAudioStream.on('data', function(chunk) {
      data += chunk;
      console.log('uploaded Audio >>'+track.track_no+' >>'+data.length);
    });
}, function(err, results) {
  console.log('audio error');
  console.log(err);
  done(err);
});

person Ilesh Patel    schedule 21.05.2015    source источник
comment
Что такое c.put()? Если он загружает данные из потока в какое-то другое место и вызывает свой обратный вызов, когда это делается, вам, вероятно, не следует иметь там обработчик событий data.   -  person mscdex    schedule 21.05.2015
comment
в c.put c — это мой ftp-объект, который является node-ftp, а put — его метод.   -  person Ilesh Patel    schedule 21.05.2015
comment
даже после удаления обработчика событий данных я получаю ту же ошибку.   -  person Ilesh Patel    schedule 21.05.2015


Ответы (1)


Я думаю, вы, вероятно, даете ответ NULL/undefined на HTTP-запрос. Попробуйте отправить фактическую полезную нагрузку в ответ.

Пытаться

c.put(readableAudioStream,track.filename, function(err) {
  if (err) {
    return callback(err);
  }
  callback(null, { success: true }); // Give an actual payload response from the completion of the upload
});

Затем позже обработайте результаты запроса:

function (err, results) {
   if (err) res.send(500, err);
   res.json(results);
}
person Adam Terlson    schedule 21.05.2015
comment
где я должен это поставить? - person Ilesh Patel; 21.05.2015
comment
У меня есть еще один шаг после этого шага в Async.waterfall, так что я должен пройти? - person Ilesh Patel; 21.05.2015
comment
Я не совсем уверен, что могу ответить на это без полного контекста, но я считаю, что вам следует попробовать отправить фактический ответ полезной нагрузки, а не undefined/null. Просто отправьте что-нибудь, и я думаю, что это может исправить это. Если вы обрабатываете параметр results на следующем шаге, он должен получить объект { success: true } и отправить его с res.json(results). - person Adam Terlson; 21.05.2015