No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Usando variables de ambiente en Mongo

9/24
Recursos

Trabajar con variables de entorno ser谩 siempre la forma m谩s correcta y segura de pasarle a nuestra aplicaci贸n los datos sensibles de conexi贸n a bases de datos o claves secretas.

Pasaje de variables de entorno en NestJS

Veamos c贸mo se realiza la configuraci贸n de variables de entorno en NestJS.

Paso 1: instalaci贸n de NestJS Config

Aseg煤rate de instalar la dependencia npm i --save @nestjs/config. Esta te permitir谩 crear en la ra铆z de tu proyecto el archivo .env, que contendr谩 las variables de entorno que tu aplicaci贸n necesita.

# .env
MONGO_BBDD=nestjs_mongo
MONGO_CONF=mongodb
MONGO_HOST=localhost:27017
MONGO_PASS=secret
MONGO_USER=mongo

Revisa el m贸dulo de configuraci贸n para programaci贸n modular.

Paso 2: importaci贸n de las variables de entorno

Importa el ConfigModule en el m贸dulo principal de tu aplicaci贸n para leer correctamente el archivo .env.

// app.module.ts
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot(),
  ]
})
export class AppModule {}

Paso 3: utilizaci贸n de las variables de entorno

De esta manera, ya tienes disponible en tu aplicaci贸n para utilizar las variables de entorno que hayas definido en el archivo .env a trav茅s del objeto global de NodeJS process de la siguiente manera:

Tu cadena de conexi贸n de MongoDB:

mongodb://mongo:secret@localhost:27017/nestjs_mongo

Podr铆a quedar de la siguiente manera:

`${process.env.MONGO_CONF}://${process.env.MONGO_USER}:${process.env.MONGO_PASS}@${process.env.MONGO_HOST}/${process.env.MONGO_BBDD}`,

Recuerda no versionar en el repositorio de tu proyecto el archivo .env que contiene datos sensibles como contrase帽as o accesos privados. Tu aplicaci贸n est谩 lista para conectarse a m煤ltiples ambientes de desarrollo a trav茅s de variables de ambiente.


Contribuci贸n creada por: Kevin Fiorentino.

C贸digo de ejemplo para variables de ambiente en Mongo

// .env, .stag.env, .prod.env
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=root
MONGO_DB=platzi-store
MONGO_PORT=27017
MONGO_HOST=localhost
MONGO_CONNECTION=mongodb
// src/config.ts
import { registerAs } from '@nestjs/config';

export default registerAs('config', () => {
  return {
    ...
    mongo: { // 馃憟 
      dbName: process.env.MONGO_DB,
      user: process.env.MONGO_INITDB_ROOT_USERNAME,
      password: process.env.MONGO_INITDB_ROOT_PASSWORD,
      port: parseInt(process.env.MONGO_PORT, 10),
      host: process.env.MONGO_HOST,
      connection: process.env.MONGO_CONNECTION,
    },
  };
});
// src/database/database.module.ts
import { ConfigType } from '@nestjs/config';

import config from '../config'; // 馃憟 import config


@Global()
@Module({
  providers: [
    ...
    {
      provide: 'MONGO',
      useFactory: async (configService: ConfigType<typeof config>) => {
        const {
          connection,
          user,
          password,
          host,
          port,
          dbName,
        } = configService.mongo; // 馃憟 get mongo config
        const uri = `${connection}://${user}:${password}@${host}:${port}/?authSource=admin&readPreference=primary`;
        const client = new MongoClient(uri);
        await client.connect();
        const database = client.db(dbName);
        return database;
      },
      inject: [config.KEY], // 馃憟 Inject config
    },
  ],
  exports: ['API_KEY', 'MONGO'],
})
export class DatabaseModule {}

Aportes 6

Preguntas 6

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

En la documentaci贸n de MongoDB sobre el driver de Node JS, recomienda conectarse de esta manera a MongoDB con estas opciones:

const client = new MongoClient(uri, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

Con la forma actual da esta advertencia:

[MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring 
engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
#Mongo config
MONGO_INITDB_ROOT_USERNAME=
MONGO_INITDB_ROOT_PASSWORD=
MONGO_DB=
MONGO_PORT=27017
MONGO_HOST=
MONGO_CONNECTION=mongodb


 mongo: {
      dbName: process.env.MONGO_DB,
      user: process.env.MONGO_INITDB_ROOT_USERNAME,
      password: process.env.MONGO_INITDB_ROOT_PASSWORD,
      port: process.env.MONGO_PORT,
      host: process.env.MONGO_HOST,
      connection: process.env.MONGO_CONNECTION,
    },

Genial, est谩 muy interesante el curso

Muy buen la clase, tuve mis inconvenientes pero se debieron a errores de tipado, jeje.

馃憦