NestJS依赖注入错误:AuthGuard的UserModel无法在BookModule中解析
问题原因分析
这个错误的核心是:你的AuthGuard依赖了UserModel,但当BookModule中使用该守卫时,BookModule的上下文环境里找不到UserModel的提供者。
解决方法
1. 确保AuthModule导出必要的依赖
打开auth.module.ts,需要将UserModel(或者包含它的MongooseModule.forFeature)以及AuthGuard本身加入exports数组,让其他模块导入AuthModule时能获取到这些依赖:
@Module({ imports: [ MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), JwtModule.registerAsync({/* 你的JWT配置 */}), ConfigModule, ], providers: [AuthGuard, AuthService], exports: [ AuthGuard, MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]) ] }) export class AuthModule {}
2. 在BookModule中正确导入AuthModule
打开book.module.ts,确保已经导入AuthModule,这样BookModule就能继承AuthModule提供的所有依赖:
@Module({ imports: [AuthModule, /* 你的其他模块,比如Book的MongooseModule */], controllers: [BookController], providers: [BookService] }) export class BookModule {}
3. 检查AuthGuard的注入逻辑
打开auth.guard.ts,确认UserModel的注入方式正确,需使用@InjectModel装饰器指定模型名称:
@Injectable() export class AuthGuard extends AuthGuard('jwt') { constructor( @InjectModel(User.name) private userModel: Model<UserDocument>, private jwtService: JwtService, private configService: ConfigService ) { super(); } // 你的自定义守卫逻辑... }
4. 避免在BookModule中重复注册AuthGuard
不要在BookModule的providers数组中添加AuthGuard,否则Nest会重新创建一个守卫实例,而此时BookModule没有UserModel的提供者,会再次触发相同错误。
内容的提问来源于stack exchange,提问作者Happy Patel
相关产品推荐
相关产品推荐

