我有一个使用bodyparser()的nodejs应用程序,以及这条路线:
app.post('/users', function(req, res){
res.json(req.body)
})
当我卷曲
curl -X POST 127.0.0.1:3000/users -d 'name=batman'
服务器发回这个json:
{ name: 'batman' }
我的问题是当试图用http.request做同样的请求时,req.body是空的我虽然做同样的调用,这里是一个我用节点运行的test.js文件:
var http = require('http');
var options = {
host: '127.0.0.1',
port: 3000,
path: '/api/users',
method: 'POST'
};
var request = http.request(options, function (response) {
var str = '';
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
});
request.end("name=batman");
请求正文是空的 - > {}
为什么?我已经尝试设置内容长度,但没有做任何事情 .
2 回答
你需要传递
Content-Type
来告诉bodyParser()
使用哪个解析器 . 对于常规表单数据,您应该使用Content-Type: application/x-www-form-urlencoded
,因此:应该做的伎俩 .
Edit: 如果你发现自己在节点中做了很多客户端HTTP请求,我衷心地推荐Mikeal Rogers' request module,这使得这些事情变得轻而易举 .
确保
app.js
或server.js
中存在这些行