DevPath · Aprende a programar ESPTEN

Errores y validación robusta

El middleware de error de Express

Manejo de errores en Express

En Express, un middleware de error se distingue de los demás por tener cuatro parámetros: (err, req, res, next). Express inspecciona la aridad (número de argumentos) de la función para reconocerlo, así que los cuatro deben declararse, aunque no uses next.

function manejarErrores(err, req, res, next) {
  const status = err.statusCode || 500;
  res.status(status).json({ error: err.message });
}

Pasar el error con next(err)

Un handler no captura ni responde el error él mismo: lo delega llamando a next(err). Cuando se pasa un argumento a next, Express salta todos los middleware y handlers normales y va directo al middleware de error.

function obtenerUsuario(req, res, next) {
  const usuario = buscar(req.params.id);
  if (!usuario) {
    return next(new Error("Usuario no encontrado")); // delega
  }
  res.json(usuario);
}

Por qué centralizar

Centralizar el manejo de errores en un solo middleware (registrado al final, con app.use(manejarErrores)) evita repetir try/catch y respuestas de error en cada handler. Ventajas:

Ejemplos

El middleware de error responde con el estado adecuado

function manejarErrores(err, req, res, next) {
  const status = err.statusCode || 500;
  return { status, body: { error: err.message } };
}

console.log(manejarErrores({ message: "Roto" }, {}, {}, () => {}));
console.log(manejarErrores({ message: "No existe", statusCode: 404 }, {}, {}, () => {}));
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
Clases de error personalizadas →