Introducción a class-validator
\n\nclass-validator es una biblioteca potente y popular para la validación de datos en TypeScript y JavaScript, construida sobre la base de decoradores. Permite describir de forma declarativa las reglas de validación directamente dentro de las clases, utilizando anotaciones. Esto hace que el código sea limpio, legible y fácil de mantener.
\n\nLa biblioteca es especialmente útil al desarrollar aplicaciones de servidor (por ejemplo, en NestJS o Express), donde es necesario verificar solicitudes entrantes, datos de formularios, configuraciones y cualquier otra estructura de datos. En lugar de escribir largas cadenas de if-else, simplemente agrega decoradores a las propiedades de la clase.
\n\n¿Para qué sirve class-validator?
\n\n- \n
- Declaratividad: Las reglas de validación se definen junto a los datos, lo que mejora la legibilidad. \n
- Conjunto potente de validadores: Incluye decenas de decoradores integrados para verificar cadenas, números, fechas, arreglos, objetos anidados y mucho más. \n
- Validadores personalizados: Permite crear fácilmente sus propias reglas. \n
- Integración con TypeScript: Soporte completo para tipos y decoradores. \n
- Validación asíncrona: Soporta verificaciones que requieren operaciones asíncronas (por ejemplo, verificar unicidad en la base de datos). \n
Instalación
\n\nPara usar class-validator necesitará Node.js y npm/yarn. Instale la biblioteca y las dependencias necesarias:
\n\nnpm install class-validator class-transformer reflect-metadata\n\nO a través de yarn:
\n\nyarn add class-validator class-transformer reflect-metadata\n\nImportante: La biblioteca reflect-metadata es obligatoria para el funcionamiento de los decoradores. Asegúrese de que esté importada en su archivo principal (por ejemplo, index.ts o main.ts):
import 'reflect-metadata';\n\nTambién asegúrese de que en su tsconfig.json estén incluidas las siguientes configuraciones:
{\n "compilerOptions": {\n "experimentalDecorators": true,\n "emitDecoratorMetadata": true\n }\n}\n\nInicio rápido
\n\nVamos a crear un modelo simple de usuario y validarlo.
\n\nimport 'reflect-metadata';\nimport { validate, IsString, IsEmail, MinLength } from 'class-validator';\nimport { plainToClass } from 'class-transformer';\n\nclass User {\n @IsString()\n @MinLength(3, { message: 'El nombre debe contener al menos 3 caracteres' })\n name: string;\n\n @IsEmail({}, { message: 'Correo electrónico no válido' })\n email: string;\n\n constructor(name: string, email: string) {\n this.name = name;\n this.email = email;\n }\n}\n\nasync function main() {\n // Creamos un objeto con datos no válidos\n const userData = { name: 'Jo', email: 'not-an-email' };\n \n // Convertimos el objeto simple en una instancia de la clase\n const user = plainToClass(User, userData);\n \n // Validamos\n const errors = await validate(user);\n \n if (errors.length > 0) {\n console.log('Errores de validación:', errors);\n errors.forEach(error => {\n console.log(`Campo: ${error.property}`);\n for (const constraint in error.constraints) {\n console.log(` - ${error.constraints[constraint]}`);\n }\n });\n } else {\n console.log('¡Validación exitosa!');\n }\n}\n\nmain();\n// Salida:\n// Errores de validación: [...]\n// Campo: name\n// - El nombre debe contener al menos 3 caracteres\n// Campo: email\n// - Correo electrónico no válido\n\nMétodos y decoradores principales
\n\n1. @IsString()
\nQué hace: Verifica si el valor es una cadena de texto.
\nParámetros: Acepta un objeto opcional con opciones de validación (por ejemplo, { message: '...' }).
También en la biblioteca
Configuración de aplicaciones Kotlin: bibliotecas, enfoques y herramientas
Cliente HTTP para Swift (iOS/macOS): mejores bibliotecas 2024
Programación reactiva en C# (.NET) — Observable, Rx.NET y LINQ
Migraciones de bases de datos en C# (.NET): Entity Framework, FluentMigrator y otros enfoques