Nodejs express 3.x升级到4.x后,post请求处理的问题
Nodejs express 3.x升级到4.x后,post请求处理的问题
在express3.x的时候,处理post请求只需要 app.use(express.bodyParser({keepExtensions: true, uploadDir: ‘/tmp/’})); 这样req.body.name就能取到值 而升级到了4.x后 req.body.name是undefined,无法取值了 请问4.x是怎么处理post请求过来的数据的呢?
Node.js Express 3.x 升级到 4.x 后 POST 请求处理的问题
在 Express 3.x 中,处理 POST 请求非常简单。你只需使用 express.bodyParser()
中间件来解析请求体中的数据。例如:
var express = require('express');
var app = express();
app.use(express.bodyParser({ keepExtensions: true, uploadDir: '/tmp/' }));
app.post('/submit', function(req, res) {
console.log(req.body.name); // 这里可以获取到表单提交的数据
res.send('Data received');
});
app.listen(3000);
然而,当你将应用从 Express 3.x 升级到 4.x 后,你会发现 req.body
是 undefined
。这是因为 Express 4.x 移除了内置的中间件(如 bodyParser
),并且你需要手动安装并使用第三方中间件来处理请求体。
解决方案
为了在 Express 4.x 中正确处理 POST 请求,你需要安装 body-parser
模块,并将其作为中间件使用。以下是具体的步骤和代码示例:
-
安装
body-parser
:npm install body-parser --save
-
更新你的 Express 应用代码:
var express = require('express'); var bodyParser = require('body-parser'); var app = express(); // 使用 body-parser 中间件来解析请求体 app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.post('/submit', function(req, res) { console.log(req.body.name); // 现在可以获取到表单提交的数据 res.send('Data received'); }); app.listen(3000, function() { console.log('Server is running on port 3000'); });
解释
bodyParser.urlencoded({ extended: true })
:用于解析 URL 编码的请求体(如application/x-www-form-urlencoded
)。bodyParser.json()
:用于解析 JSON 格式的请求体(如application/json
)。
通过这种方式,你可以确保在 Express 4.x 中正确地处理 POST 请求,并且可以访问到请求体中的数据。
好像已经没有 express.bodyParser()
了。加载个 body-parser
应该可以解决。
我明白了,谢谢你
不行,body-parser的readme说了,不处理form-data方式的post了