2012-08-20 180 views
8

I tienen una aplicación nodejs usando bodyparser(), y esta ruta:req.body está vacío al hacer una solicitud POST a través de http.request

app.post('/users', function(req, res){ 
    res.json(req.body) 
}) 

cuando Encrespo servidor

curl -X POST 127.0.0.1:3000/users -d 'name=batman' 

envía volver este JSON:

{ name: 'batman' } 

mi problema es cuando se trata de hacer la misma solicitud con http.request, req.body está vacía que estoy haciendo la misma llamada, sin embargo, aquí es un archivo Test.js que corro con el nodo:

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

solicitud cuerpo está vacío ->{}

por qué? Intenté configurar el contenido pero no hago nada.

Respuesta

14

Debe pasar un Content-Type para indicar bodyParser() qué analizador usar. Para los datos de forma regular, usted debe utilizar Content-Type: application/x-www-form-urlencoded, por lo que:

var options = { 
    host: '127.0.0.1', 
    port: 3000, 
    path: '/api/users', 
    method: 'POST', 
    'Content-Type': 'application/x-www-form-urlencoded' 
}; 

debe hacer el truco.

Editar: Si te encuentras haciendo un montón de solicitudes de HTTP de los clientes en el nodo, sinceramente recomiendo Mikeal Rogers' request module, que hace que estas cosas en un santiamén.

0

Asegúrese de estas líneas están presentes en su app.js o server.js

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