2012-08-20 3 views
8

У меня есть nodejs приложение с помощью bodyparser(), и этот маршрут:req.body пуст, когда делает запрос на запись через http.request

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 пуст я делаю то же вызов, хотя, здесь есть 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"); 

тело запроса пусто ->{}

почему? Я попытался установить длину содержимого, но ничего не сделал.

ответ

14

Вам необходимо передать 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' 
}; 

Если сделать трюк.

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

0

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

var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 
Смежные вопросы