Manejo de errores con Boom
Clase 19 de 27 • Curso de Backend con Node.js: API REST con Express.js
Resumen
¿Qué es Boom y cómo ayuda a gestionar errores?
La librería Boom es una herramienta de gran utilidad para manejar errores en aplicaciones Node.js. Al respetar los status codes HTTP, hace que nuestros errores sean más descriptivos y compatibles con las convenciones estándar. La instalación es sencilla, usando el paquete @hapi/boom
. Una vez instalada, se integra fácilmente en nuestros servicios para comenzar a manipular los errores de manera efectiva. Esto mejora significativamente la interacción con los clientes, ya que reciben mensajes de error más claros y precisos.
¿Cómo se integra Boom en un servicio?
Para comenzar a utilizar Boom en un servicio, primero se debe importar la dependencia en nuestro archivo de servicio. Una vez importada, podemos manejar los errores de forma más eficiente, asociando el error a un status code adecuado.
const Boom = require('@hapi/boom');
// Ejemplo de uso en una actualización de producto
if (!productoEncontrado) {
throw Boom.notFound('Product not found');
}
Este código asegura que si un producto no se encuentra, se enviará un error 404
automatizado, mucho más intuitivo para quien desarrolle o mantenga la aplicación.
¿Cómo crear un middleware para manejar errores con Boom?
Crear un middleware que identifique y maneje errores de Boom es esencial para un manejo adecuado:
-
Identificación de errores Boom: Se verifica si el error tiene la propiedad
isBoom
. Si es así, el middleware se encarga del formateo correspondiente. -
Manipulación del output: La información necesaria, como el status code y el payload del error, se extrae del
error.output
. -
Estructuración del middleware:
function boomErrorHandler(err, req, res, next) {
if (err.isBoom) {
const { output } = err;
res.status(output.statusCode).json(output.payload);
} else {
next(err);
}
}
En este ejemplo, si el error es de tipo Boom, se maneja y responde adecuadamente, previniendo que se unan a la cadena de middleware regular.
¿Cómo mejorar la lógica de negocio usando Boom?
Podemos aplicar Boom para implementar reglas de negocio más complejas, como bloquear ciertos productos basados en criterios específicos:
- Introducción de lógica de negocio: Supongamos que ciertos productos no deben mostrarse. Utilizamos la propiedad
isBlock
determinarás si el producto está bloqueado:
const isBlocked = faker.datatype.boolean();
if (isBlocked) {
throw Boom.conflict('Product is blocked');
}
-
Prueba del middleware y la lógica: Tras implementar las reglas, pruebas periódicas aseguran la respuesta correcta para varios escenarios, desde productos encontrados hasta bloqueos por razones de negocio.
-
Error handling mejorado: Las respuestas se dividen entre los diferentes escenarios de error (404 Not Found, 409 Conflict, etc.), mejorando la experiencia del usuario final.
¿Cómo solucionar problemas comunes al implementar Boom?
Un problema típico al configurar Boom es que los headers no pueden ser ajustados después de haber sido enviados. Para evitarlo, asegúrate de que, al manejar los errores, el flujo se detiene antes de pasar al siguiente middleware:
// Corrección del flujo en la gestión de errores
if (err.isBoom) {
const { output } = err;
res.status(output.statusCode).json(output.payload);
} else {
next(err);
}
Con esta corrección, los errores se despachan correctamente, respetando el flujo de middleware de Node.js, evitando los errores comunes de múltiples configuraciones de headers.
Al implementar Boom correctamente, nuestra aplicación no solo es más robusta, sino que también ofrece feedback mucho más informativo y claro a los usuarios. Estas mejoras simplifican diagnósticos y mantenimiento, y animan a explorar más herramientas que fortalezcan las funcionalidades de nuestras aplicaciones.