¿Cómo consumo los datos 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 obtuve una respuesta 200, pero esos otros dos métodos nunca se ejecutan. ¿Porqué es eso?
Creo que estás combinando el uso del response
objeto con el delrequest
.
El response
objeto 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 bodyParser
middleware para analizar el cuerpo de la solicitud y colocar el resultado en request.body
su 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"}
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()
})
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.