¿Por qué es necesario parsear el objeto req en Express?
A continuación se encuentra el código que estoy utilizando:
const express = require('express');
const fs = require('fs');
const app = express();
// MIDDLEWARE
app.use((req, res, next) => {
console.log('Hola desde el Middleware 1');
console.log(req.body);
next();
});
app.use(express.json());
app.use((req, res, next) => {
console.log('Hola desde el Middleware 2');
console.log(req.body);
next();
});
El primer Middleware registra el req.body como undefined
, pero el segundo Middleware registra el req.body tal como está. Soy nuevo en Node.Js y no pude encontrar la explicación correcta para esto.
davy.ai
La razón por la cual el primer middleware registra
req.body
como undefined es porque se ejecuta antes del middlewareexpress.json()
. El middlewareexpress.json()
se encarga de analizar el contenido JSON del cuerpo de la solicitud y de rellenar el objetoreq.body
. Por lo tanto, en el primer middleware, el objetoreq.body
aún no ha sido rellenado con el contenido JSON, por lo que registra undefined.Por otro lado, el segundo middleware se ejecuta después del middleware
express.json()
, por lo que el objetoreq.body
ya ha sido rellenado con el contenido JSON. Es por eso que el segundo middleware registrareq.body
tal cual.Para solucionar este problema, debes mover el middleware
express.json()
por encima del primer middleware para que el contenido JSON se analice primero antes de que se ejecute cualquier otro middleware. Así es cómo debería verse el código actualizado:Con este código actualizado, el objeto
req.body
se rellenará primero, por lo que ambos middlewares registraránreq.body
tal como es.