nodejsstream – 如何中止读取错误

我正在使用'multiparty'parsing器来读取和处理我的应用程序中的multipart-form-data。 我的应用程序中间件读取上传的文件内容,即时parsing,如果成功,则发送到下一个中​​间件。 如果没有,我必须中止请求并返回错误。

/** * Middleware to read n parse uploaded multi-part form data * for campaign creation. * After successful parse, sends to next layer. * **/ var mp = require('multiparty'); module.exports = function(req, res, next) { console.log("File processor at work..."); var form = new mp.Form(); form.on('part', function(part) { if (!part.filename) { part.resume();} else { part.setEncoding('utf8'); part.on('readable', function() { readFile(req, res, part); }); part.on('error', function (e) { console.log("Am i reached??"); //return res.status(400).json(e); form.emit('error', e); }) } }); form.on('error', function(err) { console.log("Error while processing upload.", 3); res.status(400).json(err); }); form.on('close', function() { console.log("Reading finished. Forwarding to next layer..."); return next(); }); form.parse(req); } 

如果parsing过程中出现任何错误(例如,readFile()),我想返回HTTP错误,而不必消耗剩余的部分缓冲区。 我相信可以有一个体面的方式来做到这一点,但我没有得到正确的。

我尝试从我的readFile()抛出exception,试图抓住它在form.on('部分',…)。 尽pipe我能够抓住这个例外,但并没有中止这个stream程。 form.on(part,..)的return()将会从这个evt处理函数中返回,而不是从外部函数中返回。

根据nodejsstream文档,我尝试从readFile()中发出错误事件,并处理part.on('error',…)中的错误。 这也给出了相同的行为,并没有结束处理。

我在这里错过了什么? 有没有一个正确的方式来告诉我不想再进一步处理它.. ..?