Nestjs使用MongoDB原生驱动时DATABASE_CONNECTION依赖注入报错
问题修复方案
- 首先排查本地MongoDB服务是否正常启动
你代码里连接的是本地27017端口的MongoDB实例,DATABASE_CONNECTION是异步provider,如果MongoDB未启动、连接失败,provider就无法完成实例化,Nest就会抛出依赖不存在的报错。你可以尝试直接用MongoDB客户端连接mongodb://127.0.0.1:27017,确认服务可正常访问后重启项目,也可以在数据库连接的catch代码块中添加错误日志,确认是否是连接异常导致的问题。 - 确认三处token字符串完全一致
检查三处DATABASE_CONNECTION字符串的拼写、大小写是否完全匹配:database.module.ts中provide字段的值database.module.ts中exports数组里的值project.service.ts中@Inject()的参数值
你提供的代码中三处是匹配的,如果有修改过代码要确认没有拼写错误。
- 清除编译缓存重新启动
Nest的缓存可能导致依赖注入识别异常,执行以下命令重启项目:rm -rf dist npm run start # 或者对应你的启动命令 nest run - 可选兜底方案:给DatabaseModule添加全局装饰器
如果上述方案都无效,可以在database.module.ts的模块定义上添加@Global()装饰器,让数据库连接provider全局可用,无需在AppModule中导入也可被识别:import { Module, Global } from '@nestjs/common'; import { MongoClient, Db } from 'mongodb'; @Global() // 新增全局装饰器 @Module({ providers: [{ provide: 'DATABASE_CONNECTION', useFactory: async (): Promise<Db> => { try { const client = await MongoClient.connect('mongodb://127.0.0.1:27017', { useUnifiedTopology: true }); return client.db('app-test'); } catch(e){ console.error('数据库连接失败:', e) throw e; } } } ], exports:[ 'DATABASE_CONNECTION' ] }) export class DatabaseModule { }
内容的提问来源于stack exchange,提问作者Hamed Mahdizadeh
相关产品推荐
相关产品推荐

