- 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
Serialización de datos para excluir campos sensibles en APIs
Clase 25 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
Proteger la información sensible como contraseñas es esencial en el diseño de una API. Aunque apliquemos un proceso de hashing sobre el campo password, no tiene sentido devolverlo en la respuesta de los endpoints. Por eso, es fundamental serializar y excluir datos críticos de manera eficiente para fortalecer nuestra seguridad y mantener buenas prácticas de desarrollo.
¿Por qué es importante excluir campos sensibles al serializar en una API?
Excluir datos como contraseñas, incluso si están protegidos con hashing, ayuda a minimizar los riesgos de exposición de información. Así, evitamos que valores privados viajen en respuestas y mantenemos la API alineada con principios de responsabilidad y privacidad.
¿Cómo utilizar ClassTransformer y Exclude para proteger campos en entidades?
Para conseguir esto empleamos ClassTransformer, una herramienta muy útil en el contexto de APIs con Node.js. Lo más relevante es el decorador @Exclude, disponible a través de la importación desde ClassTransformer. Basta con aplicarlo al campo en cuestión dentro de la entidad para lograr que ese dato no se envíe en las respuestas automáticamente.
- Importar
Excludedel paquete ClassTransformer. - Agregar el decorador en la columna que deseamos omitir.
- No hay pasos adicionales dentro de la entidad; un solo decorador resuelve el problema.
¿Cómo activar la serialización automática en toda la aplicación?
Agregar el decorador es solo el primer paso. Para que la API procese correctamente la exclusión en todas las respuestas hacer lo siguiente:
- Habilitar la transformación automática en el archivo principal (main) con la opción
transform: trueen el validator general. - Configurar opciones de transformación adicional (como habilitar conversiones implícitas).
- Implementar un interceptor global con
app.useGlobalInterceptor, importandoClassSerializerInterceptordesde NestJS. - Incluir el Reflector de NestJS Core para completar la configuración.
Este patrón asegura la serialización y exclusión de campos en cada entidad sin afectar los métodos o endpoints existentes.
¿Qué ventajas tiene este enfoque global sobre la serialización manual?
Gracias a la serialización global, ya no es necesario modificar cada endpoint individualmente. Cualquier operación que retorne una entidad (como get, create, findOne) la enviará automáticamente serializada, sin el campo password. Esto simplifica la lógica y mejora el mantenimiento del código. Cualquier punto que utilice el repositorio y la entidad user obtiene la exclusión sin pasos adicionales.
¿Te interesa saber cómo adaptar este patrón a otros campos sensibles de tus entidades o te gustaría compartir tu experiencia mejorando la seguridad de las APIs? ¡Puedes comentar tu caso!