集成多部分中间件来表达应用程序
Integrating multipart middlware to express application
我需要在单个请求中接收 JSON 数据 和文件。所以我一直在使用 body-parser
,效果很好。但是,我在寻找与 express 配合良好的模块时遇到了问题。
这是我的路由器设置:
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();
}
}
当然,为了调试目的,我已经添加了过早的响应 return。所以我需要:
- 接收将立即流式传输到 S3 的文件。
- 将其余数据解析为正常数据。
- 正确获取数据解析
目前发现的问题:
- 有时即使是小文件也需要很长时间(小于 512k,最多 5 秒,这可能是因为我在开发时使用了 vagrant,但我认为这很奇怪)。
- 字段未正确解析:
查看 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
的替代品是 busboy
。还值得注意的是 multer
写在 busboy
.
之上
我需要在单个请求中接收 JSON 数据 和文件。所以我一直在使用 body-parser
,效果很好。但是,我在寻找与 express 配合良好的模块时遇到了问题。
这是我的路由器设置:
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();
}
}
当然,为了调试目的,我已经添加了过早的响应 return。所以我需要:
- 接收将立即流式传输到 S3 的文件。
- 将其余数据解析为正常数据。
- 正确获取数据解析
目前发现的问题:
- 有时即使是小文件也需要很长时间(小于 512k,最多 5 秒,这可能是因为我在开发时使用了 vagrant,但我认为这很奇怪)。
- 字段未正确解析:
查看 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
的替代品是 busboy
。还值得注意的是 multer
写在 busboy
.