NestJS JWT策略报错:派生类构造器中访问this前需调用super
解决NestJS JWT策略中构造函数调用super前访问this的错误
错误原因:TypeScript要求派生类构造函数必须先调用super()完成父类初始化,之后才能访问this。你之前的代码在super的配置参数中直接使用this.config,此时this尚未初始化,因此触发报错。
解决方法
直接使用构造函数的config参数(而非this.config)获取JWT密钥,因为构造函数参数在super调用前已经可用:
@Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { constructor(private readonly config: ConfigService) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, secretOrKey: config.get<string>('JWT_SECRET_PASS'), // 直接用构造函数参数config }); } }
如果需要先处理密钥逻辑再传入super,也可以提前提取变量:
@Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { constructor(private readonly config: ConfigService) { // 先获取密钥并可添加额外处理逻辑 const jwtSecret = config.get<string>('JWT_SECRET_PASS'); super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, secretOrKey: jwtSecret, }); } }
这样修改后,既符合TypeScript的语法规则,又能正常通过ConfigService获取环境变量中的JWT密钥。
内容的提问来源于stack exchange,提问作者Samuel A. Souza
相关产品推荐
相关产品推荐

