Creo que estás combinando el uso del responseobjeto con el del request.
El responseobjetivo 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 bodyParsermiddleware para analizar el cuerpo de la solicitud y colocar el resultado request.bodyde 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.MyKeytoString()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
bodyPara aquellos que obtienen un objeto vacío en
req.bodySe me había olvidado establecer
headers: {"Content-Type": "application/json"}la solicitud. Cambiarlo resolvió el problema.fuente
text/jsony 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