Me gustaría agregar un módulo de configuración a mi aplicación nestjs y usar alguna configuración en mi módulo de base de datos.
Por ejemplo, me gustaría obtener el valor de host de mi configuración: en una clase, puedo hacer const dbHost = this.configService.get<string>('database.host'); , pero en mi código necesito el valor dentro de un proveedor. ¿Cómo obtengo valores de configuración dentro de un proveedor?
aplicación.módulo.ts
@Module({ imports: [ DatabaseModule, ConfigModule.forRoot({ load: [configuration], }), ], }) export class AppModule {}base de datos.módulo.ts
import { Module, Inject } from '@nestjs/common' import { MongoClient, MongoClientOptions, Db, Logger } from 'mongodb' @Module({ providers: [ { provide: 'DATABASE_CLIENT', useFactory: () => ({ client: null }) }, { provide: 'DATABASE_CONNECTION', inject: ['DATABASE_CLIENT'], useFactory: async (dbClient): Promise<Db> => { Logger.setLevel('debug') // How do I get the host value of my config? const mongo: string = 'mongodb://127.0.0.1:27017' const database: string = 'data' const options: MongoClientOptions = {} const client = new MongoClient(mongo, options) await client.connect() const db = client.db(database) return db } } ], exports: ['DATABASE_CONNECTION', 'DATABASE_CLIENT'], import: [ConfigModule] }) export class DatabaseModule { constructor(@Inject('DATABASE_CLIENT') private dbClient) {} onApplicationShutdown(signal: string) { if (signal) console.log(signal + ' signal recieved') } }En su inject , agregue ConfigService , entonces será el segundo valor de los parámetros de useFactory .
@Module({ providers: [ { provide: 'DATABASE_CLIENT', useFactory: () => ({ client: null }) }, { provide: 'DATABASE_CONNECTION', inject: ['DATABASE_CLIENT', ConfigService], useFactory: async (dbClient, config: ConfigService): Promise<Db> => { Logger.setLevel('debug') const dbHost = config.get('database.host') const mongo: string = 'mongodb://127.0.0.1:27017' const database: string = 'data' const options: MongoClientOptions = {} const client = new MongoClient(mongo, options) await client.connect() const db = client.db(database) return db } } ], exports: ['DATABASE_CONNECTION', 'DATABASE_CLIENT'], import: [ConfigModule] }) export class DatabaseModule { constructor(@Inject('DATABASE_CLIENT') private dbClient) {} onApplicationShutdown(signal: string) { if (signal) console.log(signal + ' signal recieved') } }