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

ws51t4hk  于 2022-11-13  发布在  Go
关注(0)|答案(3)|浏览(210)

因此,我尝试向我的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错误[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参数必须是字符串,但得到的是“undefined”。请确保mongoose.connect()mongoose.createConnection()的第一个参数是字符串。
我的.env文件如下所示:

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

看起来像是在app.module上MongooseModule没有阅读我的.env文件,有人知道如何解决这个问题吗?
谢谢

k5ifujac

k5ifujac1#

请尝试下面的代码,它为我工作.

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

qlfbtfca2#

这里是完整的工作代码。connectionName是在你的应用程序中有多个数据库的情况下使用。

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    CostingModule,
    MongooseModule.forRootAsync({
      connectionName: 'finance',
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: async (config: ConfigService) => ({
        uri: config.get<string>('MONGODB_URI_FINANCEDB'),
      }),
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}
zzoitvuj

zzoitvuj3#

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

set DATABASE_URL='url of your database'

你可以运行你的代码

相关问题