突然之间,我所有的项目都出现了这种情况。
每当我在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个坏请求
这快把我逼疯了。
我以为是身体解析器更新了一些东西,但我降级了,它没有帮助。
感谢任何帮助,谢谢。
我发现,它的工作时,发送内容类型
“应用程序/ json”
与服务器端结合
app.use (express.json ())
(正如@marcelocra指出的那样,2022年的版本将使用)
(旧版本供参考)
app.use (bodyParser.json ());
现在我可以通过发送
var data = {name:"John"}
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", theUrl, false); // false for synchronous request
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send(data);
结果在服务器上的request.body.name中可用。
在邮差的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());