- 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
Configuración de PostgreSQL con TypeORM en aplicaciones NestJS
Clase 12 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
Configurar un ORM (Object Relational Mapper) es esencial para conectar aplicaciones modernas con bases de datos utilizando principios de orientación a objetos. Esta guía muestra cómo integrar TypeORM con PostgreSQL en NestJS, destacando buenas prácticas de seguridad y flexibilidad.
¿Qué es un ORM y para qué sirve en NestJS?
Un ORM permite interactuar con la base de datos a través de entidades y objetos, simplificando el acceso y manipulación de datos. Frameworks populares como Laravel en PHP o Django en Python emplean sus propios ORMs; en el caso de NestJS, existen diversas opciones como TypeORM, MicroORM y Prisma.
- Permite mapear bases de datos transaccionales a objetos accesibles en la aplicación.
- Soporta múltiples motores: MySQL, MariaDB, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, incluso MongoDB.
- Facilita la declaración e integración de entidades directamente desde el código.
¿Cómo instalar TypeORM y conectarlo a PostgreSQL?
La instalación y configuración de TypeORM es directa. Aquí tienes los pasos principales:
- Instala las dependencias necesarias usando la terminal:
- npm install @nestjs/typeorm typeorm pg
- Aquí, pg actúa como el driver nativo de Node.js para PostgreSQL.
- Realiza la integración en el app.module:
- Importa
TypeOrmModuley usa la función forRoot para definir los parámetros de conexión. - Configura tipo, host, puerto (normalmente 5432), usuario, contraseña y base de datos.
- Utiliza opciones como
autoLoadEntities: trueysynchronize: truepara facilitar el trabajo inicial con entidades.
¿Qué riesgos hay al colocar credenciales directamente en el código?
Exponer usuarios y contraseñas en el código fuente es un riesgo importante tanto de seguridad como de flexibilidad:
- Al subir el código a la nube, otros desarrolladores pueden tener acceso a las credenciales.
- Si se hace un despliegue en producción, sería necesario modificar directamente el archivo fuente, lo cual es poco eficiente y riesgoso.
¿Cómo usar variables de entorno para la configuración segura?
Emplear variables de entorno resuelve los problemas de seguridad y adaptación a distintos entornos (desarrollo, pruebas, producción):
- Crea un archivo
.envignorado en el repositorio. - Define las variables necesarias, por ejemplo:
POST_HOST=localhost
POST_PORT=5432
POST_DB=myblogdb
BLOG_USER=usuario
BLOG_PASSWORD=contraseñaSeguro
- Mapea estas variables en la configuración del módulo, utilizando
ConfigServicepara inyectarlas. - Cambia la inicialización de TypeOrmModule de forRoot a forRootAsync, empleando la opción
useFactorypara obtener dinámicamente los valores del entorno.
typescript
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: 'postgres',
host: configService.get('POST_HOST'),
port: +configService.get('POST_PORT'),
username: configService.get('BLOG_USER'),
password: configService.get('BLOG_PASSWORD'),
database: configService.get('POST_DB'),
autoLoadEntities: true,
synchronize: true,
})
})
¿Cómo verificar la conexión y evitar errores frecuentes?
Al iniciar la aplicación, verifica los mensajes en la terminal. Si el ORM muestra errores relacionados con drivers o credenciales:
- Comprueba el tipo de base de datos especificado.
- Asegura que el usuario y la contraseña coincidan con los valores de la base de datos.
- Si la conexión es exitosa, la terminal mostrará la inicialización correcta del TypeOrmModule.
Aprovecha la flexibilidad de las variables de entorno para manejar distintos escenarios sin exponer datos sensibles. Si tienes dudas o quieres compartir tu experiencia, ¡anímate a dejar un comentario con tus aprendizajes!