NestJS出现UsersService依赖无法解析错误 循环依赖场景求助
NestJS循环依赖注入报错解决方案
核心错误原因
AuthModule没有对外导出AuthService,导致引入AuthModule的UsersModule无法获取到AuthService实例- 两个模块存在循环依赖,仅在
AuthModule侧对UsersModule加了forwardRef处理,UsersModule侧引入AuthModule时未做相同处理 - 若两个服务也存在互相注入的情况,服务注入时也需要加
forwardRef声明
分步修改代码
1. 修改auth.module.ts,新增AuthService导出
import { forwardRef, Module } from '@nestjs/common'; import { AuthService } from './auth.service'; import { UsersModule } from '../users/users.module'; import { PassportModule } from '@nestjs/passport'; import { LocalStrategy } from './local.strategy'; @Module({ imports: [forwardRef(() => UsersModule), PassportModule], providers: [AuthService, LocalStrategy], // 新增导出项,对外暴露AuthService exports: [AuthService] }) export class AuthModule {}
2. 修改users.module.ts,对AuthModule也添加forwardRef处理
import { forwardRef, Module } from '@nestjs/common'; import { UsersService } from './users.service'; import { UsersController } from './users.controller'; import { UserSchema } from './schemas/user.schema'; import { MongooseModule } from '@nestjs/mongoose'; import { AuthModule } from 'src/auth/auth.module'; @Module({ // 给AuthModule套上forwardRef处理循环依赖 imports: [ MongooseModule.forFeature([{name: 'User', schema: UserSchema}]), forwardRef(() => AuthModule) ], controllers: [UsersController], providers: [UsersService], exports: [UsersService] }) export class UsersModule {}
3. 检查UsersService注入AuthService的写法
如果UsersService中直接注入了AuthService,需要用@Inject配合forwardRef声明:
import { Injectable, Inject, forwardRef } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { User } from './schemas/user.schema'; import { AuthService } from 'src/auth/auth.service'; @Injectable() export class UsersService { constructor( @InjectModel('User') private userModel: Model<User>, // 注入循环依赖的服务需要加forwardRef @Inject(forwardRef(() => AuthService)) private authService: AuthService ) {} // 其余业务代码 }
修改完成后重启服务即可解决依赖解析错误。
内容的提问来源于stack exchange,提问作者Jessy_521
相关产品推荐
相关产品推荐

