запрос.тело пусто при выполнении запроса post через http.запрос

у меня есть приложение nodejs с помощью bodyparser (), и этот маршрут :

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.запрос, req.тело пусто. я делаю тот же звонок, хотя, вот тест.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, но не делаю что угодно.

2 ответов


до 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'
};

должен сделать трюк.

Edit: если вы обнаружите, что делаете много клиентских HTTP-запросов в узле, я сердечно рекомендую Mikeal Роджерс' request модуль, что делает эти вещи ветер.


убедитесь, что эти строки присутствуют в вашем app.js или server.js

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