¡Ven a la JSConf España 2026! Comprar entradas

Middlewares en Express

En esta clase introducimos uno de los conceptos fundamentales de Express: los middlewares.

Hasta ahora hemos creado un servidor con Express y algunas rutas básicas. Pero todavía no hemos visto qué ocurre en ese espacio intermedio antes de que una petición llegue a su destino final. Ahí es donde entran en juego los middlewares.

¿Qué es un middleware?

Un middleware es, literalmente, una función que se ejecuta en medio del ciclo de petición-respuesta.

Cada vez que entra una petición a nuestro servidor, Express la hace pasar por una “tubería” (pipeline) de funciones. Si una función no termina la petición (enviando una respuesta), debe pasarle el testigo a la siguiente.

Estructura de un middleware

Un middleware en Express es una función que recibe tres parámetros:

(req, res, next) => {
  // Lógica del middleware
  next()
}
  • req: El objeto de la petición (request).
  • res: El objeto de la respuesta (response).
  • next: Una función que, al ser llamada, le dice a Express que continúe con el siguiente middleware o ruta.

Servidor de ejemplo

Partimos de un servidor sencillo con dos rutas para probar nuestro middleware:

import express from 'express'

const app = express()
const PORT = process.env.PORT ?? 1234

app.get('/', (req, res) => {
  res.send('<h1>¡Hola Mundo!</h1>')
})

app.get('/health', (req, res) => {
  res.json({
    status: 'ok',
    uptime: process.uptime()
  })
})

app.listen(PORT, () => {
  console.log(`Servidor levantado en http://localhost:${PORT}`)
})

Añadiendo nuestro primer middleware

Usamos app.use para registrar un middleware que se ejecute en todas las peticiones:

app.use((req, res, next) => {
  console.log('--- Nueva petición recibida ---')
  console.log('Método:', req.method)
  console.log('URL:', req.url)
  
  // ¡Muy importante llamar a next()!
  next()
})

Este código se ejecutará antes de llegar a / o /health. Si no llamáramos a next(), la petición se quedaría “colgada” y el navegador seguiría esperando eternamente.

El orden de ejecución importa

Express ejecuta los middlewares y las rutas en el orden exacto en el que se definen en el código.

  • Si pones un app.use al principio del archivo, afectará a todas las rutas de abajo.
  • Si pones un app.use después de una ruta, solo se ejecutará si esa ruta no ha terminado la respuesta.

¿Para qué sirven los middlewares?

Aunque aquí solo hemos hecho un console.log, los middlewares son la columna vertebral de Express y se usan para:

  • Logs y Auditoría: Registrar quién accede a qué.
  • Seguridad: Comprobar si el usuario está autenticado.
  • Transformación de datos: Parsear el cuerpo de la petición (JSON, formularios).
  • Gestión de errores: Capturar fallos de forma centralizada.

Los puntos clave de la clase

  • ✅ Un middleware es una función que se ejecuta antes de las rutas.
  • ✅ Se registran globalmente usando app.use().
  • ✅ La función next() es imprescindible para no bloquear el flujo.
  • ✅ El orden en el que defines los middlewares determina cómo se procesa la petición.

En la siguiente clase empezaremos a usar middlewares más potentes para transformar los datos que recibimos en nuestro servidor.