Contáctanos
Webflow Premium Partner Ehab Fayez
Volver a Agent Skills
Seguridad y Calidad

Joi Data Validation

Valida estructuras de datos complejas con Joi, la biblioteca de validación de esquemas más potente para JavaScript.

Claude Code Cursor Copilot Windsurf

Descripción General

Joi es la biblioteca de validación de esquemas más rica en funcionalidades para JavaScript, originalmente desarrollada como parte del ecosistema hapi.js. Proporciona una API extensa para describir formas de datos con más de 100 reglas de validación, incluyendo soporte para strings, números, fechas, arrays, objetos, alternativas, datos binarios y tipos personalizados.

Joi sobresale en validar estructuras de datos complejas y profundamente anidadas con campos interdependientes. Su método .when() soporta lógica condicional compleja, y .alternatives() permite validación de tipo union con detección automática de tipos. La biblioteca puede validar y convertir datos simultáneamente, parseando strings a números, strings ISO a fechas y aplicando transformaciones personalizadas.

Para validación API, Joi se integra con Express a través de middleware como celebrate, que valida cuerpos de solicitud, parámetros de query, headers y cookies contra esquemas definidos. Los mensajes de error incluyen la ruta completa a los campos inválidos, facilitando la depuración. Joi también proporciona .describe() que genera una descripción JSON del esquema, útil para generar documentación API automáticamente.

¿Para Quién Es?

  • Validar payloads complejos de solicitudes API con objetos anidados
  • Definir esquemas de configuración con valores predeterminados y coerción
  • Validar payloads de webhook de servicios de terceros
  • Construir esquemas de validación reutilizables para modelos de base de datos

Instalación

Configurar Claude Code
npm install joi

Configuración

import Joi from "joi"

const schema = Joi.object({
  username: Joi.string().alphanum().min(3).max(30).required(),
  email: Joi.string().email().required(),
  birth_year: Joi.number().integer().min(1900).max(2010),
  role: Joi.string().valid("admin", "user").default("user"),
  metadata: Joi.object().pattern(Joi.string(), Joi.any()),
}).with("username", "email")

const { error, value } = schema.validate(data)