A medida que tu aplicaci贸n acumule m谩s y m谩s variables de entorno, puede volverse inmanejable y es propenso a tener errores el no recordar sus nombres o escribirlos mal. A continuaci贸n ver谩s como tipar variables.
C贸mo hacer el tipado de variables de entorno
Seguriza tu lista de variables de entorno de manera que evites errores que son dif铆ciles de visualizar. Veamos c贸mo puedes tipar tus variables.
1. Archivo de tipado de variables
Crea un archivo al que denominaremos config.ts
que contendr谩 el tipado de tu aplicaci贸n con ayuda de la dependencia @nestjs/config
.
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,
}
})
Importa registerAs
desde @nestjs/config
que servir谩 para crear el tipado de datos. Crea un objeto con la estructura de datos que necesita tu aplicaci贸n. Este objeto contiene los valores de las variables de entorno tomados con el objeto global de NodeJS, process
.
2. Importaci贸n del tipado de datos
Importa el nuevo archivo de configuraci贸n en el m贸dulo de tu proyecto de la siguiente manera para que este sea reconocido.
import { ConfigModule } from '@nestjs/config';
import config from './config';
@Global()
@Module({
imports: [
HttpModule,
ConfigModule.forRoot({
envFilePath: '.env',
load: [config],
isGlobal: true
}),
],
})
export class AppModule {}
3. Tipado de variables de entorno
Es momento de utilizar este objeto que genera una interfaz entre nuestra aplicaci贸n y las variables de entorno para no confundir el nombre de cada variable.
import { Controller, Inject } from '@nestjs/common';
import { ConfigType } from '@nestjs/config';
import config from './config';
@Controller()
export class AppController {
constructor(
@Inject(config.KEY) private configService: ConfigType<typeof config>
) {}
getEnvs(): string {
const apiKey = this.configService.apiKey;
const name = this.configService.database.name;
return `Envs: ${apiKey} ${name}`;
}
}
Observa la configuraci贸n necesaria para inyectar y tipar tus variables de entorno. Ahora ya no tendr谩s que preocuparte por posibles errores al invocar a una de estas variables y evitar dolores de cabeza debugueando estos errores.
Cuadro de c贸digo para tipado en config
DATABASE_NAME=my_db_prod
API_KEY=999
DATABASE_PORT=8091
DATABASE_NAME=my_db_stag
API_KEY=333
DATABASE_PORT=8091
DATABASE_NAME=my_db_prod
API_KEY=999
DATABASE_PORT=8091
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,
};
});
import config from './config';
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: enviroments[process.env.NODE_ENV] || '.env',
load: [config],
isGlobal: true,
}),
...
],
...
})
export class AppModule {}
import { ConfigType } from '@nestjs/config';
import config from './config';
@Injectable()
export class AppService {
constructor(
@Inject('TASKS') private tasks: any[],
@Inject(config.KEY) private configService: ConfigType<typeof config>,
) {}
getHello(): string {
const apiKey = this.configService.apiKey;
const name = this.configService.database.name;
return `Hello World! ${apiKey} ${name}`;
}
}
Contribuci贸n creada por: Kevin Fiorentino.
驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?
o inicia sesi贸n.