Skip to content

patriciopilco/nest-modular

Repository files navigation

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Config Module

  • Permite trabajar con variables de ambientes
  • Permite trabajar en diferentes ambientes
  1. Instalar
# Instalar Config
$ npm i @nestjs/config
  1. Crear archivos de variables de entorno [. env ]
API_KEY = XXXX
  1. Excluir el archivo de variables de entorno [ .gitignore ]
*.env
  1. 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
      })
    ]
})
  1. 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');
}

Configuración Ambientes

  • Permite trabajar con variables de ambientes de desarrollo, pruebas, producción
  1. Crear archivos por ambientes [ .env, .stag.env , .pro.env]

  2. Crear achivo configuracion [ src/enviroments.ts]

export const enviroment = {
  dev='.env',
  stag='.stag.env',
  pro='.pro.env',
}
  1. Editar [app.modules.ts]
@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: enviroments[process.env.NODE_ENV] || '.env',
      isGlobal: true,
  }),
    UsersModule,
  ],
})
  1. 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');
}
  1. Ejecutar de acuerdo al ambiente
NODE_ENV=stag npm run start:dev

Tipado en la configuración

  • Permite evitar errores de tipado en variables de configuración
  1. Crear el archivo de configuración [ src/config.ts ]

  2. 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,
    }
});
  1. 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}`;
  }
  1. 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,
  }),

Validación variables ambientes

-Validacion de Tipado -Validacion de archivos .env desde el exterior

  1. Instalar el paquete Joi
npm install --save joi
  1. 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(),
      }),
    }),
    ...
  ],
  ...
})

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published