有人可以告诉我推荐的(最新的)方式来获取快速发布的表单数据吗?
很多教程/帖子等都在谈论 bodyParser,但这不再与 Express 捆绑在一起,其他博客等建议直接使用 urlencoded,但现在这也不可用。
我正在努力寻找有关这些框架或技术的准确信息。
顺便说一句,我感兴趣的是非常简单的小形式数据
有人可以告诉我推荐的(最新的)方式来获取快速发布的表单数据吗?
很多教程/帖子等都在谈论 bodyParser,但这不再与 Express 捆绑在一起,其他博客等建议直接使用 urlencoded,但现在这也不可用。
我正在努力寻找有关这些框架或技术的准确信息。
顺便说一句,我感兴趣的是非常简单的小形式数据
您应该body-parser
通过npm-install
. 现在它作为一个单独的中间件出现。
之后在 app.js 中添加以下行
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
// in latest body-parser use like below.
app.use(bodyParser.urlencoded({ extended: true }));
它将post
请求解析为object
. 您将在req.body
.
在您的post
请求处理程序中。
app.post('/post',function(request,response){
console.log(request.body) //you will get your data in this as object.
})
上面的答案是针对具体提出的问题,OP 正在寻找bodyParser
不再属于的(已弃用)express
。
由于问题的标题非常笼统,并且答案不包括 的所有方面form-data
,我会将@StLia 的答案作为编辑。
由于其复杂且通常较大的性质,这不能处理多部分实体。对于多部分主体,您可能对以下module感兴趣:
您可以使用express-formidablemodule来做到这一点。通过以下命令安装“express-formidable”
npm install express-formidable
简单的例子如下
const express = require('express');
const formidable = require('express-formidable');
var app = express();
app.use(formidable());
app.post('/upload', (req, res) => {
//req.fields contains non-file fields
//req.files contains files
res.send(JSON.stringify(req.fields));
});
来自body-parser的自述文件:
由于其复杂且通常较大的性质,这不能处理多部分实体。
以上将适用于x-www-form-urlencoded
并且json
不适用于任何multipart
. form-data
也是multipart
与标题multipart/form-data
。
在 的情况下form-data
,您最好的解决方案是使用express-formidable。
除了带有 的解决方案之外formidable
,还有另一个module,我自 2019 年以来一直在我最近的项目中使用。moduleexpress-form-data可以轻松地在您的服务器文件中声明,例如:
const express = require('express');
const formData = require('express-form-data');
app.use(formData.parse());
app.post('/image-upload', (req, res) => {
console.log(req.files);
})
...
例如,在图像上传的情况下,req.files
将提供处理文件所需的所有相关数据,例如路径、大小、文件名等。
我注意到@HubballiHuli 的答案是使用一个名为 express-formidable 的包。您不需要使用这个不必要的包,它提供了一个(小)代码文件。相反,您可以自己完成(现在删除依赖项)。
这是强大的中间件文件:
'use strict';
const formidable = require('formidable');
function parse(opts, events) {
return (req, res, next) => {
if (req.express_formidable && req.express_formidable.parsed) {
next();
return;
}
const form = new formidable.IncomingForm();
Object.assign(form, opts);
let manageOnError = false;
if (events) {
events.forEach((e) => {
manageOnError = manageOnError || e.event === 'error';
form.on(e.event, (...parameters) => { e.action(req, res, next, ...parameters); });
});
}
if (!manageOnError) {
form.on('error', (err) => {
next(err);
});
}
form.parse(req, (err, fields, files) => {
if (err) {
next(err);
return;
}
Object.assign(req, { fields, files, express_formidable: { parsed: true } });
next();
});
};
}
module.exports = parse;
exports.parse = parse;
现在介绍如何使用它:
const express = require('express');
const formidableMiddleware = require('./formidableMiddleware.js');
var app = express();
app.use(formidableMiddleware());
app.post('/upload', (req, res) => {
//req.fields contains non-file fields
//req.files contains files
res.send(JSON.stringify(req.fields));
});
前段时间我写了一篇关于不必要的包以及为什么不使用它们的文章:https : //medium.com/@alexjamesdunlop/unnecessary-packages-b3623219d86