NestJS中JwtService报JWT_MODULE_OPTIONS依赖缺失错误如何解决
问题原因
这是配置错误,不是@nestjs/jwt的bug,问题出在两处配置不当:
- 你将服务类
JwtService放到了AuthModule的imports数组中,imports字段仅允许传入Nest模块类,不能传入服务提供者。Nest误将JwtService当作模块解析,自然找不到它依赖的配置项JWT_MODULE_OPTIONS,触发第一个报错。 - 你在
AppModule中直接使用AuthMiddleware时,Nest会在AppModule的注入上下文里查找中间件的依赖JwtService,但之前的AuthModule没有将JwtService导出,导致AppModule无法获取到该实例,触发第二个报错。
修复步骤
仅需要修改auth.module.ts的配置即可:
- 删除
imports数组中的JwtService - 在
exports数组中新增JwtService,让导入AuthModule的其他模块可以访问到JwtService实例
修改后的auth.module.ts代码如下:
import { Module } from '@nestjs/common'; import { JwtModule, JwtService } from '@nestjs/jwt'; import { AuthMiddleware } from './auth.middleware'; @Module({ imports: [ JwtModule.register({ secret: process.env.JWT_SECRET, signOptions: { expiresIn: '1day' }, }), ], providers: [AuthMiddleware], exports: [AuthMiddleware, JwtService], }) export class AuthModule {}
额外注意
如果你的JWT_SECRET是写在.env文件中,需要确保项目根模块已经配置了ConfigModule加载环境变量,否则process.env.JWT_SECRET会返回undefined,可能引发后续的JWT校验错误。
内容的提问来源于stack exchange,提问作者Luís Felipe de Souza Silva
相关产品推荐
相关产品推荐

