当通过http.request发送post请求时,req.body是空的
我有一个nodejs应用程序使用bodyparser(),这条路线:
app.post('/users', function(req, res){ res.json(req.body) })
当我curl
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");
请求正文为空 – > {}
为什么? 我试过设置内容长度,但没有做任何事情。
您需要传递一个Content-Type
来告诉bodyParser()
使用哪个parsing器。 对于常规的表单数据,你应该使用Content-Type: application/x-www-form-urlencoded
,所以:
var options = { host: '127.0.0.1', port: 3000, path: '/api/users', method: 'POST', 'Content-Type': 'application/x-www-form-urlencoded' };
应该做的伎俩。
编辑:如果你发现自己在节点上做了很多客户端HTTP请求,我衷心推荐Mikeal Rogers的request
模块 ,这使得这些事情变得轻而易举。
确保这些行出现在你的app.js
或server.js
var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false}));