Validación de datos con Joi
Clase 20 de 27 • Curso de Backend con Node.js: API REST con Express.js
Resumen
¿Cómo podemos validar datos en el backend usando Joi?
Validar datos en el backend es crucial para garantizar la integridad y seguridad de nuestra aplicación. Uno de los casos de uso más comunes es asegurarse de que la información que recibimos del cliente sea correcta y esté completa antes de procesarla. Para ello, en esta clase se introduce el uso de la librería Joi, una herramienta potente para la validación de esquemas en JavaScript. A continuación, profundizamos en el proceso para implementar validaciones de datos usando Joi y Middlewares.
¿Qué es Joi y por qué es útil para la validación de datos?
Joi es una librería diseñada específicamente para validar objetos JavaScript. Permite definir un esquema para los datos esperados y ofrece diversas opciones de validación, como tipos de campos, requerimientos, límites de longitud, validaciones alfanuméricas, entre otros.
- Facilita la representación de las restricciones de datos de manera declarativa.
- Mejora la capacidad de reutilización y actualización de esquemas.
- Reduce el riesgo de errores al asegurar que los datos cumplen con requisitos predefinidos antes de ser procesados.
¿Cómo configuramos Joi para validar nuestros datos?
Para empezar a usar Joi, primero debemos instalar la librería e importarla en nuestro proyecto. A continuación, definimos un esquema de validación conforme a los requerimientos de nuestra aplicación.
const Joi = require('joi');
const schema = Joi.object({
nombre: Joi.string().alphanum().min(3).max(15).required(),
precio: Joi.number().integer().min(10).required(),
id: Joi.string().guid()
});
Este bloque de código define un esquema para tres campos: nombre
, precio
, e id
. Cada campo tiene restricciones específicas:
nombre
debe ser un string alfanumérico de entre 3 y 15 caracteres, y es requerido.precio
debe ser un número entero mínimo de 10 y también es requerido.id
debe seguir el formato GUID.
¿Cómo implementamos Joi en middlewares para validar dinámicamente?
Para hacer que la validación sea flexible y dinámica, se propone el uso de un middleware que pueda manejar diferentes propiedades de las solicitudes (requests). Aquí es donde entra en juego la creación de Middlewares dinámicos utilizando Closures.
function validatorHandler(schema, property) {
return (req, res, next) => {
const data = req[property];
const { error } = schema.validate(data);
if (error) {
next(boom.badRequest(error));
} else {
next();
}
};
}
module.exports = validatorHandler;
Este middleware acepta un schema
y una property
(por ejemplo, body
, params
o query
) y valida los datos de manera dinámica dependiendo de dónde se encuentren en la solicitud. Si la validación falla, se envía un error.
¿Cuáles son las mejores prácticas para usar Joi en el backend?
- Centralizar esquemas de validación: Mantener los esquemas en archivos separados, como
product.schema.js
, facilita la gestión y evolución de las reglas de validación. - Utilizar el manejador de errores: Integrar Joi con un manejador de errores, como
boom
, organiza la respuesta del servidor ante datos inválidos. - Mantener las funciones puras y reutilizables: Las funciones de validación deben ser modulares para facilitar su uso en diferentes rutas y contextos.
¿Qué sigue después de implementar validaciones con Joi?
Después de haber implementado validaciones con Joi, el siguiente paso sería integrar y probar estas validaciones en las rutas de su aplicación. Esto garantizará la integridad de los datos en toda la aplicación y mejorará la experiencia del usuario al ofrecer mensajes de error claros y precisos. Continuar explorando las capacidades de Joi y los middleware en JavaScript enriquecerá tu comprensión y habilidades en el desarrollo de software robusto y seguro.