- 1

Instalación y configuración inicial de NestJS para APIs
06:28 - 2

Instalación del CLI de NestJS y primer proyecto con API
11:29 - 3

Creación de endpoints dinámicos para consultar usuarios en NestJS
20:23 - 4

Operaciones CRUD en APIs REST con Postman
23:37 - 5

Método PUT para actualizar usuarios con ID automático
19:42 - 6

Códigos de estado HTTP y manejo de errores en APIs con NestJS
16:07 - 7

DTOs y validación automática de datos en APIs con NestJS
19:31 - 8

Patrón de servicios e inyección de dependencias en NestJS
25:09 - 9

Configuración de variables de entorno en NestJS
20:44 - 10

Creación y organización de módulos en NestJS para aplicaciones escalables
12:26 quiz de Fundamentos y Primer CRUD
DTOs y validación automática de datos en APIs con NestJS
Clase 7 de 35 • Curso de Backend con NestJS
Contenido del curso
- 11

Configuración de PostgreSQL con Docker y Docker Compose
16:08 - 12

Configuración de PostgreSQL con TypeORM en aplicaciones NestJS
12:17 - 13

Creación de entidades ORM con decoradores en TypeScript
09:17 - 14

Implementación del Repository Pattern con TypeORM en NestJS
29:55 - 15

Relaciones uno a uno entre usuarios y perfiles en PostgreSQL
17:00 - 16

Actualización de DTOs con mapped types en NestJS para perfil y usuario
38:56 - 17

Generación automática de módulos CRUD con NestJS y AI
25:34 - 18

Relaciones uno a muchos con TypeORM en NestJS
17:56 - 19

Creación de entidad Category con relaciones many-to-many en NestJS
15:28 - 20

Relaciones many-to-many con TypeORM y validación de arrays
17:40 - 21

Reutilización de servicios entre módulos en NestJS
09:04 - 22

Configuración de migraciones de base de datos con TypeORM
23:01 - 23

Migraciones de base de datos sin pérdida de información
20:46 quiz de Base de Datos y Persistencia con TypeORM
- 24

Cómo proteger contraseñas con hashing usando Bcrypt en NestJS
10:15 - 25

Serialización de datos para excluir campos sensibles en APIs
04:13 - 26

Configuración de autenticación con Passport en NestJS
19:16 - 27

Implementación de endpoint de login con Node.js y NestJS
09:09 - 28

Implementación de JSON Web Token para autenticación en NestJS
16:15 - 29

Protección de endpoints con JWT guards en NestJS
11:34 - 30

Automatización de user ID en APIs con JWT
11:48 quiz de Autenticación y Autorización
- 31

Integración del SDK de OpenAI en Node.js para automatizar contenido
28:26 - 32

Documentación automática de APIs con Swagger en NestJS
15:59 - 33

Preparar una API Node.js para producción: seguridad y despliegue
10:46 - 34

Desplegar aplicación Node.js a producción con Railway y PostgreSQL
21:11 - 35

Desarrollo de API REST escalable con NestJS en producción
02:36
La validación de datos es esencial en cualquier API para garantizar integridad y coherencia antes de procesar información o ejecutar lógica de negocio. Aquí aprenderás a escalar la validación usando NestJS, implementando Data Transfer Objects (DTOs) y los paquetes class-validator y class-transformer para profesionalizar tu capa de validación sin depender de validaciones manuales.
¿Por qué es importante la validación de datos en el controller de NestJS?
El controller es el punto de entrada que protege tus datos y decide si están correctos o si se presentan errores, como datos mal formados o acceso no autorizado. Cuando la validación se hace manualmente, por ejemplo verificando el email campo por campo, el proceso resulta poco escalable y repetitivo. Por eso es necesario un mecanismo más automatizado y robusto.
¿Cómo se usan los DTOs y los decoradores en NestJS para la validación?
Los DTOs definen la estructura y reglas de los datos que recibe tu API, permitiendo validaciones automáticas tanto para query params como para datos en el body.
- Se crean como clases en TypeScript, usando decoradores aportados por class-validator.
- El nombre más adecuado para un DTO debe describir la acción que realizará, como
createUserDTOpara creación de usuario. - Los decoradores especifican reglas claras: por ejemplo, que un campo sea string, que no esté vacío, o que el email tenga un formato válido.
- Gracias a estos decoradores, no necesitas inventar expresiones regulares ni agregar múltiples condiciones if.
Ejemplo de definición de un DTO:
import { IsString, IsNotEmpty, IsEmail } from 'class-validator';
export class CreateUserDTO {
@IsString()
@IsNotEmpty()
name: string;
@IsEmail()
@IsNotEmpty()
email: string;
}
¿Qué dependencias y configuración inicial necesitas?
Para habilitar esta validación automática deberás instalar dos paquetes esenciales:
- class-validator: provee los decoradores para imponer reglas de validación.
- class-transformer: permite transformar datos entrantes en instancias de las clases DTO.
Comando de instalación:
npm i --save class-validator class-transformer
También se recomienda trabajar con dos terminales: una para mantener el servidor corriendo y otra para ejecutar instalaciones o cambios.
¿Cómo se configuran y aplican validaciones globales en la API?
Tras crear e importar tus DTOs, la validación se activa de forma global mediante un Validator Pipe.
- En tu archivo principal, normalmente
main.ts, importa desde common elValidatorPipe. - Añádelo a la aplicación con
app.useGlobalPipes(new ValidatorPipe())justo después de instanciar la app y antes de escuchar solicitudes. - Así te aseguras de que todas las rutas que usen DTOs validen automáticamente los datos antes de llegar al método del controller.
¿Cómo se interpretan los errores y qué ventajas aporta el sistema de validación?
Cuando los datos no cumplen las reglas, la API devuelve automáticamente un error 400 Bad Request y un mensaje informativo, por ejemplo:
- El nombre no debe estar vacío.
- El email debe ser un string, no vacío y cumplir el formato adecuado.
Esto elimina la necesidad de escribir condiciones manuales para cada campo. Además, puedes definir mensajes personalizados para cada error, consiguiendo retroalimentación detallada al usuario.
¿Cómo manejar conflictos con ESLint y TypeScript al usar decoradores?
Puede que ESLint marque ciertos usos de decoradores como error por reglas como no-unsafe-call. Si esto impide el correcto uso, puedes añadir una excepción específica en tu archivo eslint.config:
'no-unsafe-call': 'off',
Procura no deshabilitar todas las reglas y dialoga con tu equipo sobre cuándo amerita hacer excepciones.
¿Cuáles son los siguientes pasos tras crear un DTO para creación de usuario?
El reto siguiente es desarrollar un DTO para actualización de usuario. Este debe validar los mismos campos, pero como opcionales, de modo que no fallen si no se envían y permitan actualizar sólo los datos presentes. ¿Te animas a probarlo en tu proyecto?