2

我正在使用“多方”解析器在我的应用程序中读取和处理多部分表单数据。我的应用程序中间件读取上传的文件内容,即时解析它,如果成功,则发送到下一个中​​间件。如果没有,我必须中止请求并返回错误。

/**
 * 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 流文档,我尝试从 readFile() 中发出错误事件并在 part.on('error', ...) 中处理错误。这也给出了相同的行为,并且不会结束处理。

我在这里想念什么?有没有合适的方法告诉流我不想进一步处理它..?

4

0 回答 0