Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在nodejs后端处理xmlhttprequest中止文件上载_Javascript_Node.js_Ajax_Xmlhttprequest_Koa - Fatal编程技术网

Javascript 在nodejs后端处理xmlhttprequest中止文件上载

Javascript 在nodejs后端处理xmlhttprequest中止文件上载,javascript,node.js,ajax,xmlhttprequest,koa,Javascript,Node.js,Ajax,Xmlhttprequest,Koa,我已经实现了通过XMLHttpRequest将文件从React前端发送到nodeJS(KoaV1)后端,特别是为了能够跟踪文件上传进度。作为补充,我决定通过标准的xhr.abort()函数添加upload cancel。没关系,在客户端工作得很好,但每次我收到后端抛出的解析错误时: Error: Parse Error at Error (native) at Socket.socketOnEnd (_http_server.js:422:22) at emitNone (events.j

我已经实现了通过XMLHttpRequest将文件从React前端发送到nodeJS(KoaV1)后端,特别是为了能够跟踪文件上传进度。作为补充,我决定通过标准的
xhr.abort()
函数添加upload cancel。没关系,在客户端工作得很好,但每次我收到后端抛出的
解析错误时:

Error: Parse Error
 at Error (native)
 at Socket.socketOnEnd (_http_server.js:422:22)
 at emitNone (events.js:91:20)
 at Socket.emit (events.js:185:7)
 at endReadableNT (_stream_readable.js:973:12)
 at _combinedTickCallback (internal/process/next_tick.js:74:11)
 at process._tickDomainCallback (internal/process/next_tick.js:122:9)
下面是处理文件流并将其保存到本地计算机的控制器代码。在它之前,
formData
co-busboy

module.exports.saveFiles = function* (files) {
  const savedFiles = [];
  let file = yield files;

  while (file) {
    const fileName = file.filename;
    const fileExt = path.extname(fileName);
    const newFileName = `${generator.generate()}${fileExt}`;
    const filePath = path.join(config.uploadFolder, newFileName);

    const stream = fs.createWriteStream(filePath);
    file.pipe(stream);

    savedFiles.push({
      fileId: newFileName,
      fileName,
      mimeType: file.mimeType,
    });

    file = yield files;
  }

  return savedFiles;
};
正如您所看到的,我使用了来自文件的可读流和可写流来保存它,这是一个问题,因为我无法在这里处理
解析错误
,我尝试在这两个流上使用
错误
结束
事件,但它们只是没有发出,与通过
尝试捕获
包装的情况相同。捕获此错误的唯一方法是顶级
app.on('error',cb)
中间件,但它离我的控制器很远

那个么,有并没有办法捕获控制器内部的错误并向客户端发送正确的响应呢