Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.9K
Views
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 answers
Answer question

0

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

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!