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

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

这快把我逼疯了。

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

感谢任何帮助,谢谢。


当前回答

确保["key":" type", "value":" json"] & ["key":"Content-Type", "value":"application/x-www-form-urlencoded"]在你的邮差请求头中

其他回答

即使当我第一次学习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)
   })
}

检查您的HTML标签名称属性

<input name="fname">

body解析器使用标签名称属性来识别标签。

我用上面建议的multer解决了这个问题,但他们没有给出一个完整的工作示例,关于如何做到这一点。基本上,当你有一个enctype="multipart/form-data"的表单组时,这种情况就会发生。下面是表单的HTML:

<form action="/stats" enctype="multipart/form-data" method="post">
  <div class="form-group">
    <input type="file" class="form-control-file" name="uploaded_file">
    <input type="text" class="form-control" placeholder="Number of speakers" name="nspeakers">
    <input type="submit" value="Get me the stats!" class="btn btn-default">            
  </div>
</form>

下面是如何使用multer来获取Express.js和node.js的值和名称:

var multer  = require('multer')
var upload = multer({ dest: './public/data/uploads/' })
app.post('/stats', upload.single('uploaded_file'), function (req, res) {
   // req.file is the name of your file in the form above, here 'uploaded_file'
   // req.body will hold the text fields, if there were any 
   console.log(req.file, req.body)
});

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