Configuración de PostgreSQL con TypeORM en aplicaciones NestJS
Clase 12 de 35 • Curso de Backend con NestJS
Resumen
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
TypeOrmModule
y 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: true
ysynchronize: true
para 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
.env
ignorado 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
ConfigService
para inyectarlas. - Cambia la inicialización de TypeOrmModule de forRoot a forRootAsync, empleando la opción
useFactory
para 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!