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

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

这快把我逼疯了。

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

感谢任何帮助,谢谢。


当前回答

发出邮差请求时,错误源没有定义特定的报头类型。我只是简单地用两种方法相加

Content-Type: application/json

或者在postman中显式地将原始数据类型定义为JSON,同时发出请求也可以解决问题。

其他回答

只是一个快速输入-我有同样的问题(失眠测试我的私人api),当我添加Content-Type: application/json时,它立即工作了。让我困惑的是,对于GET和POST请求,我所做的一切几乎都是一样的,但是PUT似乎不能工作。我真的真的希望这篇文章能帮助一些人走出调试的兔子洞!

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

Content-Length : <calculated when request is sent>

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

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

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

Jason Kim的回答是:

所以与其

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

我有这个

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

我犯了一个非常愚蠢的错误,忘记在我的html文件中为输入定义名称属性。

所以与其

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

我有这个。

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

现在请求。正文是这样填充的:{password: 'hhiiii'}