Comprender custom config en nestJS, simplemente bien explicado
Ya que sabemos que nest config usa detrás .env, es necesario refactorizar para aplicar buenas prácticas o modular de mejor manera el código, esta ves explicado de manera sencilla. Si seguimos la documentación, se crea un archivo externo para luego importar esta configuración al módulo.
export default () => ({
port: parseInt(process.env.PORT, 10) || 3000,
database: {
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT, 10) || 5432
}
});
Antes que nada se debe exportar esta función anónima para poder luego acceder a ella, port: es el key que obtiene como valor PORT al cual accedemos con process.env, si vienes de conocer JavaScript esto ya es faminiliar, parseInt transformará el valor en un entero (Int) ya que se espera obtener un numero y no una cadena, en caso de no poder acceder a la variable se da como segunda opción 3000.
Luego podemos acceder a host y port a travez de database el cual también accede a diferentes variables de entorno.
import configuration from './config/configuration';
@Module({
imports: [
ConfigModule.forRoot({
load: [configuration],
}),
],
})
export class AppModule {}
El método load permite cargar el archivo de configuración customizado y una ves realizado es tiempo de acceder a ellas con el método get() al inyectar o acceder en nuestro controller o service
constructor(private configService: ConfigService) {}
Es tiempo de acceder a las variables con el método get().
const dbHost = this.configService.get<string>('database.host');
Si queremos acceder a variables que anidan más data, es recomendable crear una interfaz, si sigues la información puedes relacionar que database.host es un string y database.port es un Int por esto la siguiente interfaz.
interface DatabaseConfig {
host: string;
port: number;
}
const dbConfig = this.configService.get<DatabaseConfig>('database');
// you can now use `dbConfig.port` and `dbConfig.host`
const port = dbConfig.port;
Accediendo desde el main. Una ves has implementado todo tal como se muestran en los ejemplos de arriba, el main.ts puede hacer uso de estas para cosas como, colocar el pueto de la app o seleccionar el transporte. Para esto debemos estanciar el configService y luego acceder a las variables.
const configService = app.get(ConfigService); const port = configService.get('PORT');