Conexión a Bases de Datos con Variables de Entorno en Node.js

Clase 8 de 36Curso de NestJS: Persistencia de Datos con TypeORM

Resumen
// .env, .stag.env, .prod.env POSTGRES_DB=my_db POSTGRES_USER=nico POSTGRES_PASSWORD=postgres POSTGRES_PORT=5432 POSTGRES_HOST=localhost
// src/config.ts import { registerAs } from '@nestjs/config'; export default registerAs('config', () => { return { database: { name: process.env.DATABASE_NAME, port: process.env.DATABASE_PORT, }, postgres: { // 👈 add config dbName: process.env.POSTGRES_DB, port: parseInt(process.env.POSTGRES_PORT, 10), password: process.env.POSTGRES_PASSWORD, user: process.env.POSTGRES_USER, host: process.env.POSTGRES_HOST, }, apiKey: process.env.API_KEY, }; });
// src/database/database.module.ts import { ConfigType } from '@nestjs/config'; import config from '../config'; @Global() @Module({ providers: [ ... { provide: 'PG', useFactory: (configService: ConfigType<typeof config>) => { // 👈 const { user, host, dbName, password, port } = configService.postgres; const client = new Client({ user, host, database: dbName, password, port, }); client.connect(); return client; }, inject: [config.KEY], }, ], exports: ['API_KEY', 'PG'], }) export class DatabaseModule {}
// src/users/services/users.service.ts import { Client } from 'pg'; @Injectable() export class UsersService { constructor( ..., @Inject('PG') private clientPg: Client, // 👈 inject PG ) {} getTasks() { return new Promise((resolve, reject) => { this.clientPg.query('SELECT * FROM tasks', (err, res) => { if (err) { reject(err); } resolve(res.rows); }); }); } }
// src/users/controllers/users.controller.ts @Controller('users') export class UsersController { @Get('tasks') // 👈 new endpoint getTasks() { return this.usersService.getTasks(); } }