A progressive Node.js framework for building efficient and scalable server-side applications.
- Permite trabajar con variables de ambientes
- Permite trabajar en diferentes ambientes
- Instalar
# Instalar Config
$ npm i @nestjs/config
- Crear archivos de variables de entorno [. env ]
API_KEY = XXXX
- Excluir el archivo de variables de entorno [ .gitignore ]
*.env
- Configurar archivo modules [ app.modules.ts ]
# Importar ConfigModule
import { ConfigModule } from '@nestjs/config'
# Configuración de archivo de entorno y de manera global
@Module ({
imports:[
ConfigModule.forRoot({
envfilePath: '.env'
isGlobal: true
})
]
})
- Configurar servicio
# Importar ConfigService
import { ConfigService } from '@nestjs/config'
#Inyección de variables de entorno
constructor (
private configService: ConfigService,
)
#Consumo de variable de entorno
metodo ( ) {
this.configService.get('API_KEY');
}
- Permite trabajar con variables de ambientes de desarrollo, pruebas, producción
-
Crear archivos por ambientes [ .env, .stag.env , .pro.env]
-
Crear achivo configuracion [ src/enviroments.ts]
export const enviroment = {
dev='.env',
stag='.stag.env',
pro='.pro.env',
}
- Editar [app.modules.ts]
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: enviroments[process.env.NODE_ENV] || '.env',
isGlobal: true,
}),
UsersModule,
],
})
- Configuración servicio
# Importar ConfigService
import { ConfigService } from '@nestjs/config'
#Inyección de variables de entorno
constructor (
private configService: ConfigService,
)
#Consumo de variable de entorno
metodo ( ) {
const apikey = this.configService.get<string>('API_KEY');
}
- Ejecutar de acuerdo al ambiente
NODE_ENV=stag npm run start:dev
- Permite evitar errores de tipado en variables de configuración
-
Crear el archivo de configuración [ src/config.ts ]
-
Editar el arhivo de configuración
import { registerAs } from '@nestjs/config'
export default registerAs('config', () => {
return {
database: {
name: process.env.DATABASE_NAME,
port: process.env.DATABASE_PORT,
},
apiKey: process.env.API_KEY,
}
});
- Configurar servicio para hacer uso de variables tipadas
3.1 Importar Inject
# Importar Inject
import { Injectable, Inject } from '@nestjs/common';
3.2 Importar archivo config.ts
# Importar archivo config
import config from './config';
3.3 Importar ConfigType
# Importar ConfigType
import { ConfigType } from '@nestjs/config';
3.4 Crear configService en el constructor
# Inyectar config.KEY al paramero configService
constructor(
@Inject(config.KEY) private configService: ConfigType<typeof config>,
){}
3.5 Usar variable de ambiente tipada
# Acceder al valor de la variable mediante el atributo configService
getHello(): string {
const apikey = this.configService.apiKey;
return `ApiKey = ${apikey}`;
}
- Cargar configuración en el modulo
# Añadir load para cargar la configuración config
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: enviroments[process.env.NODE_ENV] || '.env',
load: [config],
isGlobal: true,
}),
-Validacion de Tipado -Validacion de archivos .env desde el exterior
- Instalar el paquete Joi
npm install --save joi
- Importar el Joi en el módulo de la aplicación a través de la propiedad validationShema.
import * as Joi from 'joi';
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: enviroments[process.env.NODE_ENV] || '.env',
load: [config],
isGlobal: true,
validationSchema: Joi.object({
API_KEY: Joi.number().required(),
DATABASE_NAME: Joi.string().required(),
DATABASE_PORT: Joi.number().required(),
}),
}),
...
],
...
})