Nodejs - 在快递4.9.0的帖子中未定义的Req.body

时间:2014-12-15 13:59:57

标签: javascript node.js curl express

我是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

请帮助,谢谢。

3 个答案:

答案 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/modulecurl -X POST -d 'foo=bar' -d 'baz=bla' http://127.0.0.1:3000/module

对于JSON,您必须明确设置正确的Content-Typecurl -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