我正在使用'multiparty'解析器来读取和处理我的应用程序中的多部分表单数据。我的app中间件读取上传的文件内容,即时解析,如果成功,则发送到下一个中间件。如果没有,我必须中止请求并返回错误。
/**
* 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);
}
如果在解析过程中出现任何错误(即readFile()),我想返回HTTP错误,而不必使用剩余的部分缓冲区。我相信可以有一个不错的方法来做到这一点,但我没有做对。
我尝试在readFile()中抛出异常,尝试在form.on('part',...)中捕获异常。即使我能够捕获异常,它也没有中止流程。 form.on(part,..)中的return()将从此evt处理函数返回,但不会从外部函数返回。
根据nodejs stream文档,我尝试从readFile()中发出错误事件,并在part.on('error',...)中处理错误。这也会产生相同的行为,并且不会结束处理。
我在这里缺少什么?是否有正确的方法告诉流我不想再进一步处理它了??