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

每当我在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个坏请求

这快把我逼疯了。

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

感谢任何帮助,谢谢。


当前回答

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

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

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

其他回答

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

Content-Length : <calculated when request is sent>

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

我的问题是先创建路线 要求(“。/线路/路线”)(应用); 我之前把它移到了代码末尾 app.listen 它成功了!

在邮差的3个选项可用的内容类型选择“X-www-form-urlencoded”,它应该工作。

还可以摆脱错误消息替换:

app.use(bodyParser.urlencoded())

:

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

参见https://github.com/expressjs/body-parser

“体解析器”中间件只处理JSON和urlenencoded数据,而不是多部分

正如@SujeetAgrahari提到的,体解析器现在内置在express.js中。

使用app.use (express.json ());在JSON体的最新版本中实现它。对于URL编码的主体(由HTTP表单POSTs生成的那种)使用app.use(express.urlencoded());

我的输入中没有名字…我的请求是空的……很高兴这是完成的,我可以继续编码。谢谢大家!

Jason Kim的回答是:

所以与其

<input type="password" class="form-control" id="password">

我有这个

<input type="password" class="form-control" id="password" name="password">

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

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

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

助教:-)