Joi para JavaScript (Node.js): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a Joi: qué es y para qué sirve

\n\n

Joi es una potente biblioteca para la validación de datos en el entorno JavaScript (Node.js). Permite describir esquemas de datos mediante una API simple y expresiva, y luego verificar que los objetos reales cumplan con dichos esquemas. Joi es especialmente popular en el desarrollo del lado del servidor de aplicaciones web, donde es necesario validar solicitudes entrantes, configuraciones, datos de formularios y cualquier otra estructura de datos.

\n\n

Razones principales para usar Joi:

\n
    \n
  • Seguridad: evita que datos incorrectos o maliciosos ingresen a su aplicación
  • \n
  • Legibilidad del código: los esquemas de Joi son fáciles de leer y entender
  • \n
  • Flexibilidad: admite estructuras anidadas complejas, validación condicional y reglas personalizadas
  • \n
  • Integración: funciona excelentemente con Express, Koa, Fastify y otros frameworks
  • \n
  • Errores detallados: proporciona mensajes de error claros indicando la ubicación exacta del problema
  • \n
\n\n

Instalación de Joi

\n\n

La instalación de Joi en un proyecto Node.js se realiza mediante npm o yarn:

\n\n
# Con npm\nnpm install joi\n\n# Con yarn\nyarn add joi\n\n# Si usa TypeScript, instale los tipos (opcional)\nnpm install @types/joi --save-dev
\n\n

Después de la instalación, puede importar Joi en su proyecto:

\n\n
const Joi = require('joi');\n// o para módulos ES:\n// import Joi from 'joi';
\n\n

Inicio rápido: primer ejemplo de validación

\n\n

Vamos a crear un esquema simple para validar datos de usuario y comprobar su funcionamiento:

\n\n
const Joi = require('joi');\n\n// Definimos el esquema de validación\nconst schema = Joi.object({\n    username: Joi.string()\n        .alphanum()\n        .min(3)\n        .max(30)\n        .required(),\n    password: Joi.string()\n        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),\n    email: Joi.string()\n        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })\n});\n\n// Datos a validar\nconst userData = {\n    username: 'john_doe',\n    password: 'myPassword123',\n    email: 'john@example.com'\n};\n\n// Ejecutamos la validación\nconst { error, value } = schema.validate(userData);\n\nif (error) {\n    console.log('Error de validación:', error.details);\n} else {\n    console.log('Datos válidos:', value);\n}
\n\n

En este ejemplo, creamos un esquema para un objeto con tres campos. El método validate() devuelve un objeto con dos propiedades: error (si hay errores) y value (datos validados).

\n\n

Métodos principales de Joi

\n\n

1. Joi.string() — Validación de cadenas

\n

Qué hace: Crea un validador para valores de cadena. Proporciona múltiples métodos para verificar la longitud, el formato, el contenido y otras características de la cadena.

\n\n

Parámetros: Sin parámetros. Devuelve un objeto validador al que se pueden aplicar métodos en cadena.

\n\n

Ejemplo:

\n
const schema = Joi.string()\n    .min(3)           // longitud mínima de 3 caracteres\n    .max(10)          // longitud máxima de 10 caracteres\n    .alphanum()       // solo letras y números\n    .required();      // campo obligatorio\n\nconsole.log(schema.validate('Hola'));    // { value: 'Hola' }\nconsole.log(schema.validate('Hi'));       // { error: ... } - cadena demasiado corta\nconsole.log(schema.validate('Hola123')); // { value: 'Hola123' }\nconsole.log(schema.validate('Hola!'));   // { error: ... } - contiene caracteres especiales
\n\n

2. Joi.number() — Validación de números

\n

Qué hace: Crea un validador para valores numéricos. Permite verificar el rango, si es entero, positivo y otras propiedades de los números.

\n\n

Parámetros: Sin parámetros. Admite métodos en cadena para su configuración.

\n\n

Ejemplo:

\n

                
    
    

Recommendations