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

Resuelto neuromancer asked hace 12 años • 8 respuestas

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 obtuve una respuesta 200, pero esos otros dos métodos nunca se ejecutan. ¿Porqué es eso?

neuromancer avatar Apr 04 '12 13:04 neuromancer
Aceptado

Creo que estás combinando el uso del responseobjeto con el delrequest .

El responseobjeto es para enviar la respuesta HTTP al cliente que llama, mientras que usted desea acceder al cuerpo del archivo request. ver esta respuesta que proporciona alguna orientación.

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

Actualización para Express 4.16+

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

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

Actualizado para Express 4.0 - 4.15

El analizador de cuerpo se dividió en su propio paquete npm después de la v4, requiere una instalación por separadonpm 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);

Para versiones anteriores de Express (< 4)

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 según las líneas de:

$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}
Pero P. avatar Apr 04 '2012 08:04 Pero P.

Para expreso v4+

Instale body-parser desde 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()
})
chrisarton avatar Jul 08 '2014 15:07 chrisarton

Para aquellos que obtienen un objeto vacíoreq.body

Se me había olvidado escribir headers: {"Content-Type": "application/json"} la solicitud. Cambiarlo resolvió el problema.

Daniel Thompson avatar Jan 10 '2019 03:01 Daniel Thompson