集成多部件中间件来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
上面。