我是nodejs的初学者,我尝试使用中间件正文解析或使用任何内容来了解req.body,但两者都发现req.body未定义。这是我的代码
var app = require('express')();
var bodyParser = require('body-parser');
var multer = require('multer');
app.get('/', function(req, res) {
res.send("Hello world!\n");
});
app.post('/module', function(req, res) {
console.log(req);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(multer);
console.log(req.body);
});
app.listen(3000);
module.exports = app;
我使用命令curl -X POST -d 'test case' http://127.0.0.1:3000/module
来测试它。
express的版本:4.9.0
node的版本:v0.10.33
请帮助,谢谢。
答案 0 :(得分:5)
您正在将body-parser
的快速配置放在错误的位置。
var app = require('express')();
var bodyParser = require('body-parser');
var multer = require('multer');
// these statements config express to use these modules, and only need to be run once
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer);
// set up your routes
app.get('/', function(req, res) {
res.send("Hello world!\n");
});
app.post('/module', function(req, res) {
console.log(req);
console.log(req.body);
});
app.listen(3000);
module.exports = app;
答案 1 :(得分:5)
默认情况下,cURL使用Content-Type: application/x-www-form-urlencoded
表示不包含文件的表单提交。
对于urlencoded表单,您的数据需要采用正确的格式:curl -X POST -d 'foo=bar&baz=bla' http://127.0.0.1:3000/module
或curl -X POST -d 'foo=bar' -d 'baz=bla' http://127.0.0.1:3000/module
。
对于JSON,您必须明确设置正确的Content-Type
:curl -H "Content-Type: application/json" -d '{"foo":"bar","baz":"bla"}' http://127.0.0.1:3000/module
。
同样正如@Brett所说,你需要{/ 1}}中间件之前 POST路由某处(路由处理程序之外)。
答案 2 :(得分:1)
您必须确保在定义路线之前定义所有快速配置。因为body-parser负责解析requst的主体。
ProfileStore