Creo que estás combinando el uso del response
objeto con el del request
.
El response
objetivo es enviar la respuesta HTTP al cliente que realiza la llamada, mientras que desea acceder al cuerpo del request
. Ver esta respuesta que proporciona alguna orientación.
Si está utilizando un JSON válido y lo está PUBLICANDO Content-Type: application/json
, puede usar el bodyParser
middleware para analizar el cuerpo de la solicitud y colocar el resultado 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);
Prueba 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 del cuerpo se dividió en su propio paquete npm después de la 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, 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);
request.body.MyKey
toString()
en el objeto. Eche un vistazo a los documentos del nodoconsole.log
, ya que inspecciona el objeto y devuelve una representación de cadena.console.log('request =' + JSON.stringify(request.body))
console.log()
automáticamente encadenará un objeto (víautil.inspect()
), por lo que esto funcionaría:console.log("with request", request.body);
Para Express v4 +
instale body-parser desde el npm.
https://www.npmjs.org/package/body-parser#installation
fuente
A veces no necesita bibliotecas de terceros para analizar JSON del texto. A veces todo lo que necesitas es el siguiente comando JS, pruébalo primero:
fuente
body
Para aquellos que obtienen un objeto vacío en
req.body
Se me había olvidado establecer
headers: {"Content-Type": "application/json"}
la solicitud. Cambiarlo resolvió el problema.fuente
text/json
y obteniendo{}
como respuesta. Supervisión total de mi parte. Muy útil.@Daniel Thompson menciona que se había olvidado de agregar {"Content-Type": "application / json"} en la solicitud . Pudo cambiar la solicitud, sin embargo, no siempre es posible cambiar las solicitudes (aquí estamos trabajando en el servidor).
En mi caso, necesitaba forzar el tipo de contenido: text / plain para que se analizara como json.
Si no puede cambiar el tipo de contenido de la solicitud, intente usar el siguiente código:
En lugar de usar express.json () globalmente, prefiero aplicarlo solo donde sea necesario, por ejemplo, en una solicitud POST:
fuente
Este app.use (express.json) ahora le permitirá leer el objeto JSON de entrada entrante
fuente