【问题标题】:req.body is empty when making a post request via http.request通过 http.request 发出 post 请求时 req.body 为空
【发布时间】:2012-08-15 20:55:54
【问题描述】:

我有一个使用 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 为空 不过,我正在做同样的调用,这是我使用 node 运行的 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");

请求正文为空 -> {}

为什么?我试过设置内容长度,但没有做任何事情。

【问题讨论】:

    标签: node.js request express


    【解决方案1】:

    你需要传递一个Content-Type 来告诉bodyParser() 使用哪个解析器。对于常规的表单数据,你应该使用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'
    };
    

    应该做的伎俩。

    编辑:如果您发现自己在 node 中执行大量客户端 HTTP 请求,我衷心推荐 Mikeal Rogers' request module,这让这些事情变得轻而易举。

    【讨论】:

      【解决方案2】:

      确保这些行出现在您的 app.jsserver.js

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 2018-04-25
        • 1970-01-01
        • 1970-01-01
        • 2018-08-03
        • 1970-01-01
        • 2017-02-16
        相关资源
        最近更新 更多