¿Qué es el middleware?
Al finalizar este tema
Podrás explicar qué es el middleware, comprender la secuencia (el flujo de procesamiento) mediante la cual Express procesa las solicitudes y crear y aplicar tu propio middleware.
"Procesamiento intermedio" entre la solicitud y la respuesta
Cuando llega una solicitud al servidor web, no se envía inmediatamente una respuesta. Entre ambos ocurren varias etapas.
Solicitud (Request) → [Registro] → [Verificación de autenticación] → [Análisis del cuerpo] → Controlador de ruta → Respuesta (Response)Cada una de estas etapas intermedias es un middleware. Se puede definir como "una función que realiza alguna acción entre la recepción de una solicitud y el envío de una respuesta".
Estructura del middleware en Express
En Express, el middleware es una función que recibe 3 parámetros.
function myMiddleware(req, res, next) {
// req: objeto de solicitud (información enviada por el cliente)
// res: objeto de respuesta (información que enviará el servidor)
// next: función para pasar al siguiente middleware
console.log(`${req.method} ${req.url}`);
next(); // Si no se llama a esto, la solicitud se detiene aquí.
}
app.use(myMiddleware);next() es esencial. Debe llamarse para que la solicitud continúe hacia el siguiente middleware (o controlador de ruta). Si se omite next(), el cliente esperará indefinidamente.
Middleware en la práctica: registro, autenticación y manejo de errores
Registro de solicitudes
app.use((req, res, next) => {
const now = new Date().toISOString();
console.log(`[${now}] ${req.method} ${req.url}`);
next();
});
// [2026-07-03T10:30:00.000Z] GET /usersVerificación de la autenticación
function authGuard(req, res, next) {
const token = req.headers.authorization;
if (!token) {
return res.status(401).json({ error: 'Se requiere inicio de sesión' });
}
next(); // Si hay token, continuar al siguiente
}
// Aplicar solo a rutas específicas
app.get('/my-profile', authGuard, (req, res) => {
res.json({ name: 'Kim Hoon' });
});app.use() se puede aplicar a todas las solicitudes o, de forma opcional, como segundo argumento de una ruta específica.
Middleware para el manejo de errores
// Cuatro parámetros — Express lo reconoce como controlador de errores
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Error interno del servidor' });
});El middleware de manejo de errores tiene 4 parámetros (err adicional). Express distingue los controladores de errores por esta firma. Si se llama a next(err) en cualquier parte del código, la ejecución llegará aquí.
El orden de ejecución define la secuencia
Los middleware se ejecutan en el orden en que se registraron con app.use(). Cambiar el orden modifica el comportamiento.
// 1. Análisis del cuerpo (¡primero!)
app.use(express.json());
// 2. Registro
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`, req.body);
next();
});
// 3. Rutas
app.post('/users', (req, res) => {
res.json(req.body);
});
// 4. Manejo de errores (siempre al final)
app.use((err, req, res, next) => {
res.status(500).json({ error: err.message });
});express.json() debe colocarse antes del registro para que req.body contenga los datos analizados. Si se invierte el orden, req.body será igual a undefined. En el middleware, la posición del código determina el orden de ejecución.
Resumen clave
El middleware no es un concepto complejo. Es una (req, res, next) conectada en secuencia. El registro, la autenticación, el análisis y el manejo de errores son todas las "tareas intermedias" repetitivas en los servidores web. Este concepto se aplica no solo a Express, sino también a la mayoría de los frameworks web (Django, Rails, Spring), por lo que, una vez comprendido, puede implementarse en cualquier entorno.