NestJS配置MongoDB连接时报Cannot read property 'get' of undefined错误
错误根因
Cannot read property 'get' of undefined 报错指向mongo.service.ts第20行的this.configService.get调用,说明this.configService未被正确初始化,值为undefined。核心原因是Nest依赖注入体系没有正确将ConfigService实例注入到MongoService的构造函数中,触发条件有两个:
MongoService没有添加@Injectable()装饰器,Nest无法识别其为可注入的服务类,不会自动处理它的依赖注入。MongooseModule.forRootAsync的异步配置未声明依赖的ConfigModule,依赖注入容器找不到ConfigService的提供者,无法完成注入。
修复步骤
步骤1:给MongoService添加可注入装饰器
修改mongo.service.ts文件,代码如下:
import { Injectable } from '@nestjs/common'; import { MongooseModuleOptions, MongooseOptionsFactory } from '@nestjs/mongoose'; import { Configuration } from '../../config/config.keys'; import { ConfigService } from '../../config/config.service'; @Injectable() export class MongoService implements MongooseOptionsFactory { constructor( private configService: ConfigService ) {} createMongooseOptions(): MongooseModuleOptions { const user = this.configService.get(Configuration.DB_MONGO_USER); const password = this.configService.get(Configuration.DB_MONGO_PASSWORD); const server = this.configService.get(Configuration.DB_MONGO_HOST); const database = this.configService.get(Configuration.DB_MONGO_DATABASE); return { uri: `mongodb://${user}:${password}@${server}/${database}?retryWrites=true&w=majority`, }; } }
步骤2:修正app.module.ts中的Mongoose配置
在MongooseModule.forRootAsync配置中添加imports字段,导入封装了ConfigService的ConfigModule,确保依赖可以被正确解析:
@Module({ imports: [ MongooseModule.forRootAsync({ imports: [ConfigModule], // 此处替换为你实际的Config模块名称 useClass: MongoService, }), // 其余模块导入保持不变 ], // 其余模块配置保持不变 })
补充验证
确认你的ConfigModule已经将ConfigService加入到exports数组中,这样外部模块导入ConfigModule时才能拿到ConfigService实例:
// config.module.ts 示例 @Module({ providers: [ConfigService], exports: [ConfigService] // 必须存在该配置 }) export class ConfigModule {}
内容的提问来源于stack exchange,提问作者Juanma Carrasco
相关产品推荐
相关产品推荐

