突然之间,我所有的项目都发生了这样的事情。
每当我使用express和正文解析器在nodejs中发布帖子时,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
这已经让我抓狂了。
我认为这是body-parser中更新的东西,但我降级了,它没有帮助。
感谢您的帮助,谢谢。
发布于 2014-07-03 23:18:24
在Postman的3个可用内容类型选项中,选择"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提到的,正文解析器现在内置了express.js。
在JSON bodies的最新版本中使用app.use(express.json());
来实现它。对于URL编码的主体(由HTTP form POSTs生成的那种),使用app.use(express.urlencoded());
发布于 2014-09-18 12:13:16
对于Postman,要使用原始JSON数据有效负载测试HTTP post操作,请选择raw
选项并设置以下标头参数:
Content-Type: application/json
此外,请确保在JSON有效负载中用双引号将用作键/值的任何字符串括起来。
body-parser
包可以很好地解析多行原始JSON有效负载。
{
"foo": "bar"
}
使用Postman v0.8.4.13扩展(body-parser
v1.12.2和express
v4.12.3)在Chrome v37和v41中测试,设置如下:
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
发布于 2015-01-28 03:22:45
我犯了一个非常愚蠢的错误,忘记在html文件中为输入定义name
属性。
因此,不是
<input type="password" class="form-control" id="password">
我有这个。
<input type="password" class="form-control" id="password" name="password">
现在,request.body
是这样填充的:{ password: 'hhiiii' }
https://stackoverflow.com/questions/24543847
复制相似问题