¿Cómo consumo los datos de JSON POST en una aplicación Express?

Estoy enviando la siguiente cadena JSON a mi servidor.

( { id = 1; name = foo; }, { id = 2; name = bar; } ) 

En el servidor tengo esto.

 app.post('/', function(request, response) { console.log("Got response: " + response.statusCode); response.on('data', function(chunk) { queryResponse+=chunk; console.log('data'); }); response.on('end', function(){ console.log('end'); }); }); 

Cuando envío la cadena, muestra que recibí una respuesta de 200, pero esos otros dos métodos nunca se ejecutan. ¿Porqué es eso?

Creo que está combinando el uso del objeto de response con el de la request .

El objeto de response es para enviar la respuesta HTTP de vuelta al cliente llamante, mientras que usted desea acceder al cuerpo de la request . Vea esta respuesta que proporciona alguna guía.

Si está utilizando JSON válido y lo está PUBLICANDO con Content-Type: application/json , puede usar el middleware bodyParser para analizar el cuerpo de la solicitud y colocar el resultado en request.body de su ruta.

 var express = require('express') , app = express.createServer(); app.use(express.bodyParser()); app.post('/', function(request, response){ console.log(request.body); // your JSON response.send(request.body); // echo the result back }); app.listen(3000); 

Pruebe a lo largo de las líneas de:

 $ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/ {"MyKey":"My Value"} 

Actualizado para Express 4+

El analizador corporal se dividió en su propio paquete npm después de v4, requiere una instalación separada npm install body-parser

 var express = require('express') , bodyParser = require('body-parser'); var app = express(); app.use(bodyParser.json()); app.post('/', function(request, response){ console.log(request.body); // your JSON response.send(request.body); // echo the result back }); app.listen(3000); 

Actualización para Express 4.16+

A partir de la versión 4.16.0, está disponible un nuevo middleware express.json() .

 var express = require('express'); var app = express(); app.use(express.json()); app.post('/', function(request, response){ console.log(request.body); // your JSON response.send(request.body); // echo the result back }); app.listen(3000); 

Para Express v4 +

instalar body-parser desde la npm.

 $ npm install body-parser 

https://www.npmjs.org/package/body-parser#installation

 var express = require('express') var bodyParser = require('body-parser') var app = express() // parse application/json app.use(bodyParser.json()) app.use(function (req, res, next) { console.log(req.body) // populated! next() }) 

A veces no necesita bibliotecas de terceros para analizar JSON del texto. A veces, todo lo que necesita el siguiente comando JS, pruébelo primero:

  const res_data = JSON.parse(body);