突然之间,我所有的项目都出现了这种情况。

每当我在nodejs中使用express和body-parser req发布帖子时。Body是一个空对象。

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

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded())

// parse application/json
app.use(bodyParser.json())

app.listen(2000);

app.post("/", function (req, res) {
  console.log(req.body) // populated!
  res.send(200, req.body);
});

通过ajax和邮递员,它总是空的。

但是通过curl

$ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/

它按预期工作。

我尝试在前者中手动设置Content-type: application/json,但我总是得到400个坏请求

这快把我逼疯了。

我以为是身体解析器更新了一些东西,但我降级了,它没有帮助。

感谢任何帮助,谢谢。


当前回答

我相信这可以解决app.use(express.json());

其他回答

几分钟前我也遇到了同样的问题,我在上面的答案中尝试了所有可能的方法,但它们都有效。

我做的唯一一件事,就是升级Node JS版本,我不知道升级会影响一些东西,但它确实影响了。

我已经安装了Node JS 10.15.0版本(最新版本),我返回到8.11.3,现在一切正常。也许体解析器模块应该对此进行修复。

我发现,它的工作时,发送内容类型

“应用程序/ json”

与服务器端结合 app.use (express.json ()) (正如@marcelocra指出的那样,2022年的版本将使用)

(旧版本供参考) app.use (bodyParser.json ());

现在我可以通过发送

var data = {name:"John"}
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", theUrl, false); // false for synchronous request
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send(data);

结果在服务器上的request.body.name中可用。

改变app.use (bodyParser.urlencoded ());在代码中

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

而在postman中,在header中更改Content-Type值为 Application /x-www-form-urlencoded为Application /json

助教:-)

在邮差中,即使按照接受的答案,我也得到了一个空的请求体。问题是没有传递一个名为

Content-Length : <calculated when request is sent>

这个头是默认存在的(以及其他5个),我已经禁用了。启用此选项,您将收到请求正文。

在我的情况下,我使用Fetch API发送POST请求,在正文中,我发送了一个对象而不是字符串。

错误-> {body: {email: 'value'}}

我纠正了stringized body -> {body: JSON。Stringify ({email: 'value'})}