es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el primer middleware registra req.body como undefined es porque se ejecuta antes del middleware express.json(). El middleware express.json() se encarga de analizar el contenido JSON del cuerpo de la solicitud y de rellenar el objeto req.body. Por lo tanto, en el primer middleware, el objeto req.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 objeto req.body ya ha sido rellenado con el contenido JSON. Es por eso que el segundo middleware registra req.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:

    const express = require('express');
    const fs = require('fs');
    
    const app = express();
    
    // MIDDLEWARE
    app.use(express.json());
    
    app.use((req, res, next) => {
      console.log('Hola desde el Middleware 1');
      console.log(req.body);
    
      next();
    });
    
    app.use((req, res, next) => {
      console.log('Hola desde el Middleware 2');
      console.log(req.body);
    
      next();
    });
    

    Con este código actualizado, el objeto req.body se rellenará primero, por lo que ambos middlewares registrarán req.body tal como es.

Comments are closed.