NestJS中JwtService已从其他模块导出仍无法解析依赖问题
错误原因
- 重复注册
JwtService是核心诱因:你已经在AppModule中导入了封装好Jwt能力的AuthModule,但又在AppModule的providers数组中手动加入了JwtService。手动注册的JwtService实例没有绑定对应的JWT_MODULE_OPTIONS配置项,Nest无法解析依赖直接抛出错误。 AuthModule存在冗余配置:@nestjs/jwt的JwtModule.register执行时,已经自动完成了JwtService和对应配置项的注册与导出,你不需要手动在AuthModule的providers和exports中单独声明JwtService。- 额外注意你提供的
AuthModule代码存在笔误:导入语句写的是import { TokenService } from './auth.service',但实际提供者用的是AuthService,这个笔误也会引发依赖查找失败。
修正方案
第一步:修正AuthModule配置
import { Module } from '@nestjs/common' // 修正导入笔误 import { AuthService } from './auth.service' import { JwtModule } from '@nestjs/jwt' @Module({ imports: [ JwtModule.register({ secret: "mysecret", signOptions: { expiresIn: "60s" }, }), ], // 仅注册业务服务,Jwt相关实例由JwtModule提供 providers: [AuthService], // 仅导出对外暴露的AuthService即可,无需手动导出JwtService exports: [AuthService], }) export class AuthModule {}
第二步:修正AppModule配置
@Module({ imports: [ AuthModule, // 其余依赖 ], controllers: [AppController], // 删除重复注册的JwtService providers: [AppService], }) export class AppModule {}
补充说明
如果你的业务需要在其他模块直接调用JwtService,不需要手动导出JwtService,直接在AuthModule的exports数组中加入JwtModule即可,JwtModule已经内置了JwtService的导出逻辑。
内容的提问来源于stack exchange,提问作者user842225
相关产品推荐
相关产品推荐

