Configuración y uso de variables de entorno en NestJS
Clase 9 de 17 • Curso de NestJS: Programación Modular, Documentación con Swagger y Deploy
Resumen
A medida que tu aplicación crezca, puedes llegar a necesitar decenas de variables de entorno. Variables que cambian de valor dependiendo si estás en un entorno de desarrollo, de pruebas o de producción.
Variables de entorno en NestJS
El manejo de variables de entorno en NestJS se realiza de una forma muy sencilla. Instala la dependencia @nestjs/config
e importa el módulo ConfigModule en el módulo principal de tu aplicación.
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: '.env',
isGlobal: true
}),
],
})
export class AppModule {}
El archivo que almacena las variables de entorno suele llamarse .env
. Créalo en la raíz de tu proyecto con las variables que necesitas.
API_KEY=1324567890
API_SECRET=ABCDEFGHI
De esta manera, las variables de entorno estarán disponibles en tu aplicación y utilizando el objeto global de NodeJS llamado process
puedes acceder a estos valores de la siguiente manera:
process.env.API_KEY
process.env.API_SECRET
Consejos sobre las variables de entorno
Es muy importante NO VERSIONAR el archivo .env
en el repositorio de tu proyecto. No guardes las claves secretas de tu aplicación en GIT.
Para asegurar esto, agrega el archivo .env
a la configuración del archivo .gitignore
para que no sea reconocido por Git y este no lo guarde en el repositorio.
Lo que puedes hacer es crear un archivo llamado .env.example
que contendrá un modelo de las variables de entorno que tu aplicación necesita, pero no sus valores.
API_KEY=
API_SECRET=
De este modo, cuidas tu aplicación y guardas un archivo para que cualquier desarrollador que tome el proyecto, sepa qué variables necesita configurar para el funcionamiento de la misma.
Cuadro de código para usar el módulo de configuración
npm i --save @nestjs/config
// .gitignore
*.env
// .env
DATABASE_NAME=my_db
API_KEY='1234'
// src/app.module.ts
...
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({ // 👈 Implement ConfigModule
envFilePath: '.env',
isGlobal: true,
}),
...
],
})
export class AppModule {}
// src/users/services/users.service.ts
import { ConfigService } from '@nestjs/config';
...
@Injectable()
export class UsersService {
constructor(
private productsService: ProductsService,
private configService: ConfigService, // 👈 inject ConfigService
) {}
...
findAll() {
const apiKey = this.configService.get('API_KEY'); // 👈 get API_KEY
const dbName = this.configService.get('DATABASE_NAME'); // 👈 get DATABASE_NAME
console.log(apiKey, dbName);
return this.users;
}
...
}
Contribución creada por: Kevin Fiorentino.