NestJS v9复用v8模块时无法解析Mongoose依赖问题
问题现象
升级至NestJS v9后,复用原v8.2.4版本中可正常运行的模块时,编译失败,所有包含Mongoose模型的模块均出现依赖解析错误,错误提示:
Nest can't resolve dependencies of the SystemService (?). Please make sure that the argument SystemConfigModel at index [0] is available in the SystemModule context.
问题原因
模块导入顺序错误。在AppModule中,SystemModule被优先于MongooseModule.forRoot()导入,导致SystemModule初始化时,指定名称的数据库连接(mydb)尚未创建完成,MongooseModule.forFeature()无法关联到对应的连接,最终导致依赖注入容器无法找到所需的模型实例。
解决方案
调整AppModule中的模块导入顺序,将MongooseModule.forRoot()(带自定义连接名称的配置)放在SystemModule之前,确保数据库连接先完成初始化,再加载依赖该连接的业务模块。
修改后的AppModule代码:
@Module({ imports: [ MongooseModule.forRoot(`mongodb://localhost/db1`, { connectionName: 'mydb', }), SystemModule, // 移至数据库连接配置之后 ], controllers: [AppController], providers: [AppService, AppResolver], }) export class AppModule {}
补充说明
在NestJS中,模块的导入顺序直接影响初始化顺序。当使用命名数据库连接时,必须保证对应的MongooseModule.forRoot()配置在所有使用MongooseModule.forFeature()关联该连接的模块之前导入,否则会出现模型无法解析的依赖错误。
内容的提问来源于stack exchange,提问作者Sagi Mann

