我是节点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。 谢谢!!
答案 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());