Inicio > Cursos > Node.js y Express > Middleware en Profundidad
Node.js y ExpressExpress.jsLección 7 de 20

Middleware en Profundidad

El middleware es una función que recibe (req, res, next) y puede modificar la petición, la respuesta, o pasar el control al siguiente middleware con next(). Express procesa los middlewares en orden, formando una cadena. Esta arquitectura hace que Express sea extremadamente extensible.

const express = require('express');
const cors = require('cors'); // npm install cors
const app = express();

// Middlewares globales (aplican a TODAS las rutas)
app.use(cors({ origin: 'https://miapp.com' }));  // permite peticiones cross-origin
app.use(express.json({ limit: '10mb' }));         // parsea JSON body
app.use(express.urlencoded({ extended: true }));   // parsea form data
app.use(express.static('public'));                 // sirve archivos estáticos

// Middleware personalizado de logging
const logger = (req, res, next) => {
  const inicio = Date.now();
  console.log(`→ ${req.method} ${req.url}`);

  // Interceptar cuando la respuesta termine
  res.on('finish', () => {
    const ms = Date.now() - inicio;
    console.log(`← ${res.statusCode} ${req.url} (${ms}ms)`);
  });

  next(); // ¡NUNCA olvides llamar next()!
};

app.use(logger);

// Middleware de autenticación básica
const verificarToken = (req, res, next) => {
  const auth = req.headers.authorization;
  if (!auth || !auth.startsWith('Bearer ')) {
    return res.status(401).json({ error: 'Token requerido' });
  }
  req.token = auth.split(' ')[1]; // pasar datos al siguiente middleware
  next();
};

// Aplicar solo a rutas específicas
app.get('/perfil', verificarToken, (req, res) => {
  res.json({ token: req.token });
});

// Middleware de manejo de errores (4 parámetros: err, req, res, next)
// DEBE ir al FINAL, después de todas las rutas
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(err.status || 500).json({
    error: err.message || 'Error interno del servidor'
  });
});

app.listen(3000);
ConsejoEl middleware de manejo de errores DEBE tener exactamente 4 parámetros (err, req, res, next). Si tiene 3, Express lo trata como middleware normal y los errores no llegarán a él.
← Express BásicoRouters y Arquitectura MVC →

Practica esta lección

Resuelve los ejercicios del curso de Node.js y Express en la app, gratis y con corrección automática.

Empezar a practicar