突然之间,我所有的项目都发生了这种情况。
每当我使用 express 在 nodejs 中发帖时,body-parserreq.body都是一个空对象。
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 bad request
Content-type : application/json
400 bad request
这一直让我发疯。
我认为这是在 body-parser 中更新的东西,但我降级了它并没有帮助。
任何帮助表示赞赏,谢谢。
在可用于内容类型的 3 个选项的 Postman 中,选择“X-www-form-urlencoded”,它应该可以工作。
还要摆脱错误消息替换:
app.use(bodyParser.urlencoded())
和:
app.use(bodyParser.urlencoded({ extended: true }));
见https://github.com/expressjs/body-parser
“body-parser”中间件只处理 JSON 和 urlencoded 数据,而不是多部分
正如@SujeetAgrahari 提到的,body-parser 现在内置于 express.js 中。
用于app.use(express.json());在 JSON 主体的最新版本中实现它。对于 URL 编码的正文(由 HTTP 表单 POST 生成的那种),请使用app.use(express.urlencoded());
app.use(express.json());
app.use(express.urlencoded());