mongoose - 如何在 Nestjs 中读取 MongooseModule 上的 .env 文件?

标签 mongoose environment-variables nestjs config

所以我正在尝试向我的 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],
   }),
  ]
})

嵌套打印此错误:

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

我的 .env 文件如下所示:

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

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

谢谢

最佳答案

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

// 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 {}

关于mongoose - 如何在 Nestjs 中读取 MongooseModule 上的 .env 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72460269/

相关文章:

javascript - 就像 mongoose-paginate 的过滤器一样

node.js - wait 仅在异步函数中有效 - 使用 mongoosejs exec() 时

scripting - 如何使用 JScript (WSH) 将 HKCU\Environment 中的注册表项列表打印到 SDTOUT?

nestjs - 使用 Nest.js 从 DI 获取应用程序 url

unit-testing - 开 Jest 测试 DTO 装饰器。在 Jest SPEC 文件中失败,但可以通过 Postman 运行

javascript - 将数据导入 Mongodb 模式

mongodb - 重命名数组中的子文档字段

django - 在Heroku : Can I manually set environment variables in the . env文件上部署Django应用程序?我需要安装autoenv,heroku-config等工具吗?

c# - 在 Windows Vista 和 7 中,我无法访问 %DEFAULTUSERPROFILE% 系统变量 - 它显示为未找到

javascript - Swagger UI 总是出现在 NestJS 中