Express:POST req后,Req.body未定义

时间:2015-01-08 19:57:58

标签: node.js express body-parser

我是节点JS的新手。 我的帖子请求未定义。我的快递版是4.10。 我想我错过了什么。

var express = require('express');
var http = require('http');

var app = express();

app.use(express.static(__dirname + '/public'));

var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.post('/test',function(req,res){
    var color1 = req.body.color;   
    console.log(req.headers);
    console.log("Color : "+color1);
});

在内容长度上我得到234。 enter image description here 谢谢!!

3 个答案:

答案 0 :(得分:2)

对于未来的访问者 - 似乎@mscdex的建议导致@Rahul更改客户端调用他的API,以便它传递application/json作为Content-Type标头的值。另一个选项是更改Content-Type尝试解析的body-parser标题。

您可以将body-parser配置为接受其他Content-Type,方法是指定其接受的type,如下所示:

app.use(bodyParser.json({ type: 'application/vnd.api+json' }));

这是解决从Ember应用程序发送的JSON的解决方案。我觉得最好更改Content-Type接受的默认body-parser标题,而不是更改应用程序周围的其他工具。

答案 1 :(得分:0)

正确的答案是如上所述更改默认的Content-Type:

app.use(bodyParser.json({
    type: 'application/vnd.api+json',
    strict: false
}));

strict:false解决了bodyParser拒绝有效JSON对象的一些错误。

答案 2 :(得分:0)

npm安装正文解析器

但是,如果您运行的Express版本为4.16+,则它现在包含Express内部相同的功能。

与其在代码中添加以下行以获取req.body:

app.use(bodyparser.urlencoded({extended: false}));
app.use(bodyparser.json());

如果您使用的是Express 4.16+,现在可以将其替换为:

app.use(express.urlencoded({extended: false}));
app.use(express.json());