3

我是节点 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。 在此处输入图像描述 谢谢!

4

3 回答 3

4

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

您可以通过指定它接受来配置body-parser接受不同,如下所示:Content-Typetype

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

这是对我有用的解决方案,用于解析从 Ember 应用程序发送的 JSON。我觉得更改Content-Type接受的默认标头body-parser比更改我的应用程序周围的其余工具要好。

于 2016-01-01T17:08:40.817 回答
0

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

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

strict:false绕过bodyParser拒绝有效 JSON 对象的一些错误。

于 2020-06-02T18:38:30.843 回答
0

npm 安装正文解析器

但是,如果您运行的是 4.16+ 版本的 Express,它现在在 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());
于 2020-06-11T10:29:34.680 回答