处理file upload在nodejs后端由xmlhttprequest中止

我已经实现了通过XMLHttpRequest专门从React前端发送文件到nodeJS(koa v1)后端,以获得跟踪file upload进度的能力。 作为补充,我决定通过标准的xhr.abort()函数添加上传取消。 没关系,在客户端工作得很好,但每次我得到后端引发的Parse Error

 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) 

下面是处理文件stream并将它们保存到本地机器的控制器的代码。 在formData之前,它是通过co-busboy formDataparsing的

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

正如你所看到的,我已经使用了文件和可写入stream的可读stream来保存它,这里有一个问题,因为我不能在这里处理Parse Error ,我试图在这两个stream上使用errorend事件,但是它们只是没有排出,与包装的情况相同的try catch 。 捕捉这个错误的唯一方法是顶层的app.on('error', cb)中间件,但是它远离我的控制器。

那么有什么办法来捕捉我的控制器内的错误,并发送正确的响应客户端?