A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Tipado en config

11/17
Recursos
// .env
DATABASE_NAME=my_db_prod
API_KEY=999
DATABASE_PORT=8091 // 馃憟
// .stag.env
DATABASE_NAME=my_db_stag
API_KEY=333
DATABASE_PORT=8091 // 馃憟
// .prod.env
DATABASE_NAME=my_db_prod
API_KEY=999
DATABASE_PORT=8091 // 馃憟
// src/config.ts // 馃憟 new file
import { registerAs } from '@nestjs/config';

export default registerAs('config', () => { // 馃憟 export default
  return { 
    database: {
      name: process.env.DATABASE_NAME,
      port: process.env.DATABASE_PORT,
    },
    apiKey: process.env.API_KEY,
  };
});
// src/app.module.ts
import config from './config'; // 馃憟

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: enviroments[process.env.NODE_ENV] || '.env',
      load: [config], // 馃憟
      isGlobal: true,
    }),
    ...
  ],
  ...
})
export class AppModule {}
// src/app.service.ts
import { ConfigType } from '@nestjs/config'; // 馃憟 Import ConfigType 
import config from './config'; // 馃憟 config file

@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}`;
  }
}

Aportes 5

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Apuntes

Tipar nuestro archivo de configuraci贸n le dar谩 el poder a typescript de ayudarnos a evitar errores triviales como escribir mal el nombre de una variable o no definir una variable en los archivos .env

Tipando el archivo de configuraci贸n

Para tipar el archivo de configuraci贸n debemos hacerlo con ayuda de la funcion registerAs incluida en el paquete de '@nestjs/config'

// src/config.ts // 馃憟 new file
import { registerAs } from '@nestjs/config';

export default registerAs('config', () => { // 馃憟 export default
  return { 
    database: {
      name: process.env.DATABASE_NAME,
      port: process.env.DATABASE_PORT,
    },
    apiKey: process.env.API_KEY,
  };
});

Esto lo venia haciendo con la dependencia dotenv en nodejs puro y duro jaja

Los apuntes de Angel son buenisimos!
Le agrego lo siguiente

Una vez terminado el config.ts hay que importarlo en el app.module.ts usando load:

import config from './config'; //importarlo

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: environments[process.env.NODE_ENV] || '.env',
      load: [config],
      isGlobal: true,
    }),
	...
     ],
})

Cambiamos el ConfigService por ConfigType en app.service.ts e importamos config. Luego lo inyectamos en el contructor.

import { Injectable, Inject } from '@nestjs/common';
import { ConfigType } from '@nestjs/config';
import config from './config';

@Injectable()
export class AppService {
  constructor(
    //@Inject('API_KEY') private apiKey: string,
    @Inject('TASKS') private tasks: any[],
    @Inject(config.KEY) private configService: ConfigType<typeof config>,
  ) {}
  getHello(): any {
    const apiKey = this.configService.apiKey;
    const dbName = this.configService.database.name;
    const dbPort = this.configService.database.port;
    return `api: ${apiKey} db: ${dbName} db_port: ${dbPort}`;
    //return this.tasks;
  }
}

Ctrl + a para seleccionar todo el c贸digo

justo lo que necesitaba, muchas gracias

馃憦