集成multipart middlware来表达应用程序

时间:2016-03-17 20:18:09

标签: node.js express multipartform-data

我需要在一个请求中接收 JSON数据和文件。所以我一直在使用body-parser,它完美无缺。但是我遇到了使用快速查找模块的问题。

这是我的路由器设置:

router.post('/',
  // controllers.requireAuthorization,
  controllers.multipartMiddleware,
  function (req, res) {
    console.log(req.body);
    return res.json({ body: req.body });
  },
  controllers.sitters.validate,
  controllers.sitters.create,
  controllers.sitters.serialize
);

这就是我的多部分中间函数的样子,你可以看到我正在使用多方:

function multipartMiddleware(req, res, next) {
  if (req.get('Content-Type').indexOf('multipart/form-data') + 1) {
    new multiparty.Form().parse(req, function (err, fields, files) {
      console.log(JSON.stringify(files));
      req.body = fields;
      return next(err);
    });
  } else {
    console.log(req.get('Content-Type'));
    return next();
  }
}

当然我已经为调试目的添加了过早的响应返回。所以我需要:

  • 接收将立即流式传输到S3的文件。
  • 将其余数据解析为普通数据。
  • 正确获取解析数据

现在看到的问题是:

  • 有时候即使是小文件也需要很长时间(小于512k,最多5秒,这可能是因为我在开发过程中使用了流浪汉,但我认为这很奇怪)。
  • 未正确解析字段:

enter code here

查看loca的值如何在包装数组中。

1 个答案:

答案 0 :(得分:2)

我会检查multer,它是一种流行的Express中间件,并且有许多不同的方法来处理文件(一个或多个)。它还允许设置字段,这些字段将在req.body上显示。

var multer = require('multer');
var upload = multer.dest({ 'temp/' });

// looking for single file, named 'file'
app.put('/file', upload.single('file'), function(req, res) {
  // access the file
  var file = req.file

  // any form fields sent in addition to the file are here
  var body = req.body; 
});

替代multer的另一个热门程序包是busboy。值得注意的是multer写在busboy之上。