Como conectar nestJS a una base de datos.
Guia de como agregar una base de datos a nestjs con TypeOrm.
Configuración de PostgreSQL con NestJS y Docker
Esta guía te ayudará a configurar un entorno de base de datos utilizando Docker (para evitar instalaciones locales pesadas) y cómo integrarlo con NestJS mediante TypeORM.
📋 Requisitos Previos
- Tener instalado Docker Desktop.
- Un proyecto de NestJS inicializado.
Paso 1: Configuración de Docker Compose
En lugar de instalar PostgreSQL directamente en tu sistema operativo, usaremos un contenedor. Crea un archivo llamado docker-compose.yaml en la raíz de tu proyecto, este sirve para configurar la base de datos.
Nota: Si tienes instalado postgres en tu computador salta al paso 3
version: '3'
services:
db:
image: postgres:14.3
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
container_name: nest_postgres_db
volumes:
- ./postgres-data:/var/lib/postgresql/dataPaso 2: Levantar la Base de Datos
Con el archivo docker-compose.yaml listo, levanta el servicio desde una consola ya sea cmd o bash con el siguiente comando:
docker compose up -dNota: Docker detectará que no tienes la imagen de postgres y la descargará automáticamente, despues levantará el servicio en segundo plano (-d).
Paso 3: Variables de Entorno y Dependencias
1. Crear archivo .env
Para proteger tus credenciales, crea un archivo .env en la raíz del proyecto
DB_PASSWORD=mi_contrasena_segura
DB_NAME=nombre_db_ejemplo
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres2. Instalar dependencias necesarias
Ejecuta el siguiente comando en tu terminal para instalar el soporte de variables de entorno y el ORM
# Soporte para variables de entorno
npm i --save @nestjs/config
# TypeORM y Driver de PostgreSQL
npm install --save @nestjs/typeorm typeorm pgPaso 4: Integración en AppModule
Una vez instalados los paquetes, navega y modifica el archivo src/app.module.ts..Es fundamental que ConfigModule se cargue antes que TypeOrmModule para que las variables de entorno estén disponibles antes que TypeOrm las lea.
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
// Carga de variables de entorno
ConfigModule.forRoot(),
// Configuración de la conexión
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
autoLoadEntities: true, // Registra automáticamente las clases con @Entity()
synchronize: true, // Sincroniza el esquema con la DB (Solo Desarrollo)
}),
// Otros módulos
ProductsModule,
UsersModule,
CategoriasModule,
PedidosModule,
],
})
export class AppModule {}Synchronize: En producción, cambia synchronize: true a false para evitar la pérdida accidental de datos.
Paso 5: Registrar la Entidad en el Módulo
Para comprobar que todo funciona, crearemos una entidad sencilla. Las entidades en NestJS son clases que representan las tablas de tu base de datos.
1. Crear un recurso
Primero debemos crear un rocurso esto es para crear los archivos necesarios para hacer un crud con enpoints y hacer peticiones.
nest g resource products2. Definir la Entidad
Crea el archivo src/products/entities/product.entity.ts y pega el siguiente codigo:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity() // Esto indica que la clase es una tabla de BD
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'text' })
name: string;
@Column({ type: 'float', default: 0 })
price: number;
}3. Registrar la entidad en el modulo de products
Navegar a ProductsModule (o el módulo que estés usando) e importe el TypeOrmModule.forFeature para registrar la entidad correspondiente
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Product } from './entities/product.entity';
@Module({
imports: [TypeOrmModule.forFeature([Product])], // Registra la entidad aquí
// ... controllers y providers
})
export class ProductsModule {}
¿Cómo saber si funcionó?
- Guarda todos los cambios.
- Si tu servidor de NestJS no está corriendo, ejecuta:
npm run start:dev - Observa la consola y verifica que no existan errores.
- Abre una herramienta de gestión de bases de datos como:
- TablePlus
- DBeaver
- pgAdmin
- dataGrip
- Conéctate usando las credenciales definidas en tu archivo
.env.
Si todo está correcto, deberías ver la tabla product creada automáticamente, con las columnas:
idnameprice
Con esto finalizamos la configuración de la base de datos. El siguiente paso consiste en definir el modelo de datos mediante entidades y desarrollar la lógica para los endpoints y el CRUD.
Por ultimo con typeOrm puedes conectar varios tipos de bases de datos ya sea SQL o No-sql como por ejemplo:
- MySQL
- PostgreSQL
- MariaDB
- SQLite
- MS SQL Server
- Oracle
- MongoDB
Otros posts que te pueden interesar
CRUD con Express usando TypeScript y Prisma
Aprende a construir un CRUD completo utilizando Express, TypeScript y Prisma ORM, conectando una base de datos PostgreSQL y aplicando buenas prácticas en la estructura del proyecto.
React Server Components explicados
Una guía completa sobre React Server Components y cómo cambiarán la forma en que desarrollamos.