集成多部件中间件来expression应用程序

我需要在一个请求中接收JSON数据和文件。 所以我一直在使用完美的body-parser 。 但是,我有问题find一个模块与快递工作很好。

这是我的路由器设置:

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

这就是我的multipart middleare函数的样子,你可以看到我正在使用multiparty:

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

当然,我为了debugging目的而添加了过早的响应返回。 所以我需要:

  • 接收将立即stream入S3的文件。
  • 将其余数据parsing为正常数据。
  • 正确地获取数据parsing

现在看到的问题是:

  • 它甚至需要很长的时间,即使是小文件(小于512K,最多5秒,这可能是因为我使用stream浪,而发展,但我认为这是奇怪的)。
  • 字段没有正确parsing:

在此处输入代码

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

我会结账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另一种select是multer 。 另外值得一提的是, multer写在multer上面。