【问题标题】:How to read a .env file on MongooseModule in Nestjs?如何在 Nestjs 中读取 MongooseModule 上的 .env 文件?
【发布时间】:2022-06-22 03:09:02
【问题描述】:

所以我正在尝试将配置添加到我的 NestJs 项目中,到目前为止,我一直在使用 MongooseModule 来连接到数据库,但我在 MongooseModule.forRoot() 中提供了完整的 URL。

原来是这样的:

//app.module.ts
import { Module } from '@nestjs/common';
import { MongooseModuele } from '@nestjs/mongoose';

@Module({
  imports: [MongooseModule.forRoot('mongodb://.....')]
})

然后我添加了 nestjs 配置,它看起来像这样:

//app.module.ts
import { Module } from '@nestjs/common';
import { MongooseModuele } from '@nestjs/mongoose';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
    MongooseModule.forRootAsync({
     imports: [ConfigModule],
     useFactory: async (config: ConfigService) => ({
      uri: config.get<string>('DB_HOST'),
     }),
     inject: [ConfigService],
   }),
  ]
})

但随后出现此错误:

[Nest] 14098 - 06/01/2022, 7:16:42 AM 错误 [ExceptionHandler] 无效方案,预期连接字符串以“mongodb://”或“mongodb+srv://”开头

我也试过这种方式:

//app.module.ts
import { Module } from '@nestjs/common';
import { MongooseModuele } from '@nestjs/mongoose';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    MongooseModule.forRootAsync({
     imports: [ConfigModule],
     useFactory: async (config: ConfigService) => ({
      uri: config.get<string>('DB_HOST'),
     }),
     inject: [ConfigService],
   }),
  ]
})

嵌套打印此错误:

ERROR [ExceptionHandler] openUri()uri 参数必须是字符串,得到“未定义”。确保mongoose.connect()mongoose.createConnection() 的第一个参数是字符串。

我的 .env 文件如下所示:

DB_HOST="mongodb://....."

app.module MongooseModule 似乎没有读取我的 .env 文件,有人知道如何解决吗?

谢谢

【问题讨论】:

    标签: mongoose environment-variables nestjs config


    【解决方案1】:

    您不需要任何配置文件。 您可以在 app.module.ts 文件中编写 process.env.DATABASE_URL 并从 cmd 中设置该 env 参数,如下所示:

    set DATABASE_URL='url of your database'
    

    你可以运行你的代码

    【讨论】:

      【解决方案2】:

      请尝试以下代码,它对我有用。

      // app.module.ts
      import { Module } from '@nestjs/common';
      import { ConfigModule, ConfigService } from '@nestjs/config'
      import { MongooseModule } from '@nestjs/mongoose';
      
      @Module({
        import: [
          MongooseModule.forRootAsync({
            imports: [ConfigModule],
            inject: [ConfigService],
            useFactory: async (config: ConfigService) => ({
              uri: config.get<string>('MONGODB_URI'), // Loaded from .ENV
            })
          })
        ],
      })
      export class AppModule {}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 2020-09-22
        相关资源
        最近更新 更多