Saltar al contenido principal

Middleware

En Express.js, el middleware es una función que tiene acceso al objeto de solicitud (req), al objeto de respuesta (res) y a la siguiente función de middleware en el ciclo de solicitud-respuesta (next). Se utiliza para ejecutar lógica transversal, como autenticación, logging, manejo de errores, validación de datos o configuración de cabeceras.

Concepto y propósito

Un middleware puede:

  • Ejecutar código antes o después de que una solicitud llegue al controlador.
  • Modificar objetos req y res.
  • Finalizar el ciclo de solicitud enviando una respuesta directamente.
  • Pasar el control al siguiente middleware mediante next().

Middleware global

El middleware global se aplica a todas las rutas de la aplicación usando app.use():

import express from 'express';
const app = express();

// Middleware global
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});

Middleware por ruta

También se puede aplicar middleware a rutas específicas:

function verificarAutenticacion(req, res, next) {
if (!req.headers.authorization) {
return res.status(401).send('No autorizado');
}
next();
}

app.get('/perfil', verificarAutenticacion, (req, res) => {
res.send('Página de perfil');
});

Middleware de router

Cuando se usan routers, se pueden aplicar middleware solo a ese grupo de rutas:

const router = express.Router();

router.use(verificarAutenticacion);

router.get('/usuarios', (req, res) => res.send('Lista de usuarios'));
router.post('/usuarios', (req, res) => res.send('Crear usuario'));

app.use('/api', router);

Buenas prácticas y convenciones

  • Mantener los middleware enfocados en una sola responsabilidad.
  • Reutilizar middleware para lógica común entre varias rutas o routers.
  • Evitar lógica de negocio compleja dentro del middleware; delegar a servicios o controladores.
  • Nombrar los middleware de forma descriptiva según su función (por ejemplo: auth, logger, errorHandler).
  • Aplicar middleware global solo para tareas transversales necesarias, y middleware por ruta o router para casos específicos.