当通过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.jsserver.js

 var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false}));