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

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

这快把我逼疯了。

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

感谢任何帮助,谢谢。


当前回答

类似的问题发生在我身上,我只是混合了回调参数的顺序。确保以正确的顺序设置回调函数。至少对有同样问题的人来说是这样。

router.post('/', function(req, res){});

其他回答

当表单不包含任何文件上传输入时,请确保您已经删除了表单标记处的enctype属性

enctype='multipart/form-data

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

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

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

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

检查您的HTML标签名称属性

<input name="fname">

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

我解决了这个问题通过改变我的形式在前端的enctype:

它是⛔️<form enctype="multipart/form-data"> 我将其更改为✅<form enctype="application/json">

看到数据最终弹出控制台,我松了一口气^^