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

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

这快把我逼疯了。

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

感谢任何帮助,谢谢。


当前回答

即使当我第一次学习node.js时,我开始在web-app上学习它,我在我的表单中以良好的方式完成了所有这些事情,但我仍然无法在post request中接收值。经过长时间的调试,我才知道,在我提供的形式enctype="multipart/form-data"由于我无法得到的值。我只是把它取下来,它就为我工作了。

其他回答

我只是解决了为app.use()删除任何.json()或.urlencode()的问题,因为它们给了我一些问题。我用这个简单的解决方案编写了我的代码来重新创建流

app.post('/mypath',function(req,res){
   data=""
   // we can access HTTP headers
   req.on('data', chunk => {
      data+=chunk
   })
   req.on('end', () => {
      console.log(data)
      // here do what you want with data
      // Eg: js=JSON.parse(data)
   })
}

如果你在做邮差,请在申请API时确认这些东西

在邮差的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">

使用Postman,要测试带有原始JSON数据有效负载的HTTP post动作,请选择raw选项并设置以下报头参数:

Content-Type: application/json

另外,确保在JSON有效负载中用双引号包装任何用作键/值的字符串。

主体解析器包可以很好地解析多行原始JSON有效负载。

{
    "foo": "bar"
}

在Chrome v37和v41中使用Postman v0.8.4.13扩展(body-parser v1.12.2和express v4.12.3)测试,设置如下:

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

// configure the app to use bodyParser()
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

// ... Your routes and methods here