8

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");

リクエスト本文が空です ->{}

なぜ ?content-length を設定しようとしましたが、何もしません。

4

2 に答える 2

16

使用するパーサーを指定するには、aContent-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'
};

トリックを行う必要があります。

編集:ノードで多くのクライアント HTTP リクエストを実行していることに気付いた場合は、 Mikeal Rogers のrequestモジュールを心からお勧めします。これにより、これらの作業が簡単になります。

于 2012-08-20T14:14:55.003 に答える