Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.8K
Vistas
NestJS: cómo usar variables .env en el archivo del módulo de la aplicación principal para la conexión de la base de datos

Estoy trabajando en mi primera aplicación NestJS, que funcionaba bien con la cadena de conexión de la base de datos codificada en app.module.ts .

Pero luego, según nuestros requisitos, tuve que elegir los valores de configuración de la base de datos de los archivos de entorno. Para eso, seguí la documentación de configuración en el sitio web de documentación de nestjs: https://docs.nestjs.com/techniques/configuration

Pero el problema es que necesito usar las variables .env dentro del mismo archivo para la conexión a la base de datos, lo cual está fallando.

Aquí está mi código original que funcionaba bien:

 @Module({ imports: [ MongooseModule.forRoot(`mongodb+srv://myusername:mypassword@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }), ProductModule, CategoryModule, ], controllers: [ AppController, HealthCheckController, ], providers: [AppService, CustomLogger], })

Ahora, quería elegir esos valores DB de los archivos .env que son como local.env , dev.env , etc., según el entorno. Ahora, mi este código no funciona:

 @Module({ imports: [ ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }), MongooseModule.forRoot(`mongodb+srv://${ConfigModule.get('DB_USER')}:${ConfigModule.get('DB_PASS')}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }), ProductModule, CategoryModule, ], controllers: [ AppController, HealthCheckController, ], providers: [AppService, CustomLogger], })
over 4 years ago · Santiago Trujillo
5 Respuestas
Responde la pregunta

0

MongooseModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ uri: configService.get<string>('MONGODB_URI'), }), inject: [ConfigService], });
over 4 years ago · Santiago Trujillo Denunciar

0

De los documentos de Nestjs aquí: https://docs.nestjs.com/techniques/configuration

Estos pasos me funcionaron con MySQL y TypeORM.

  1. Instale el módulo de configuración de Nestjs - npm i --save @nestjs/config . Se basa en dotenv

  2. Cree un archivo .env en su carpeta raíz y agregue sus pares clave/valor, por ejemplo, DATABASE_USER=myusername

  3. Abra app.module.ts e importe el módulo de configuración

 import { ConfigModule } from '@nestjs/config';
  1. Agregue la siguiente línea a la sección de importaciones de app.module.ts . Lo agregué en la primera importación. Cargará el contenido del archivo .env automáticamente.
 ConfigModule.forRoot(),
  1. Luego puede comenzar a usar las variables env según el proceso habitual.env.<variable_name> en la sección de configuración de la base de datos, por ejemplo
 process.env.DATABASE_USER

Para obtener más información sobre la configuración de ConfigModule, consulte el enlace anterior. Puede usar un archivo/ruta personalizado y configurar el módulo visible globalmente.

over 4 years ago · Santiago Trujillo Denunciar

0

Debe usar MongooseModule.forRootAsync(() => {...}) en lugar de MongooseModule.forRoot(...)

Esto hace que MongooseModule espere sus dependencias IOC.

Ver: https://docs.nestjs.com/techniques/mongodb#async-configuration

over 4 years ago · Santiago Trujillo Denunciar

0

1. Seguir usando ConfigModule

Debe configurar NODE_ENV en los scripts npm para que pueda usarse para cargar un archivo env basado en el env.

 "scripts": { "start:local": "NODE_ENV=local npm run start" "start:dev": "NODE_ENV=dev npm run start" }

Ahora solo puede usar ConfigModule :

 @Module({ imports: [ ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }), MongooseModule.forRoot(`mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }) ... })

2. Usando dotenv

 npm install dotenv

Agregue algunos scripts a su package.json para establecer en qué entorno se encuentra.

 "scripts": { ... "start:local": "NODE_ENV=local npm run start" "start:dev": "NODE_ENV=dev npm run start" }

Importe dotenv en el archivo main.ts Asegúrate de hacerlo en la parte superior del archivo.

 require('dotenv').config({ path: `../${process.env.NODE_ENV}.env` });

3. Usando env-cmd

Puede usar el paquete env-cmd npm.

 npm install env-cmd

Y agregue algunos comandos para diferentes envs en package.json , por ejemplo:

 "scripts": { ... "start:local": "env-cmd -f local.env npm run start" "start:dev": "env-cmd -f dev.env npm run start" } ...

Ahora puede usar las variables env, por ejemplo:

 MongooseModule.forRoot(`mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' })

process.env.MONGO_CONNECTION_STRING

over 4 years ago · Santiago Trujillo Denunciar

0

Usando el paquete nestjs/config:

npm instalar @nestjs/config

Después de instalar el paquete, en el módulo de la aplicación (archivo app.module.ts):

 import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ConfigModule.forRoot()], }) export class AppModule {}

Después de eso, se puede acceder a los archivos .env en toda la aplicación. Suponga que su archivo .env se ve así.

 DB_USER=mohit

para acceder a la variable DB_USER utilice process.env.DB_USER

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda