NestJS Axios模块报错无法解析依赖,HttpService注入失败如何解决?
问题修复方案
你的代码存在两处核心配置错误,导致依赖注入失败:
- 模块元数据配置不符合Nest规范:
imports数组仅用于导入其他Nest模块类,你将带@Injectable装饰器的提供者AuthStrategy错误放入了imports数组,Nest无法识别该类为可注入的提供者。 AuthStrategy未被注册到当前模块的providers数组中,Nest的依赖注入容器无法为其解析HttpService依赖。
修复后的模块代码
import { Module } from '@nestjs/common'; import { HttpModule } from '@nestjs/axios'; import { PassportModule } from '@nestjs/passport'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { AuthStrategy } from './auth.strategy'; @Module({ controllers: [AuthController], providers: [AuthService, AuthStrategy], // 将AuthStrategy移入providers数组 imports: [HttpModule, PassportModule], // 若其他模块需要使用AuthStrategy,可添加exports: [AuthStrategy] }) export class AuthModule {}
附加注意事项
你当前validate方法中直接await HttpService.get()的写法存在问题:@nestjs/axios的HttpService返回值为RxJS Observable对象,需要转换为Promise才能正常await获取响应数据,修改示例如下:
import { firstValueFrom } from 'rxjs'; // 其余导入代码保持不变 @Injectable() export class AuthStrategy extends PassportStrategy(Strategy) { constructor(private readonly httpService: HttpService) { super({ authorizationURL: `${process.env['OAUTH_DOMAIN']}/authorize`, tokenURL: `${process.env['OAUTH_DOMAIN']}/oauth/token`, clientID: process.env['OAUTH_CLIENT_ID'], clientSecret: process.env['OAUTH_CLIENT_SECRET'], callbackURL: process.env['OAUTH_REDIRECT_URL'], scope: ['openid', 'email', 'profile'], }); } async validate(accessToken: string): Promise<any> { // 用firstValueFrom将Observable转为Promise const response = await firstValueFrom( this.httpService.get(`${process.env['OAUTH_DOMAIN']}/`, { headers: { Authorization: `Bearer ${accessToken}` }, }) ); const data = response.data; console.log(data); return data; } }
内容的提问来源于stack exchange,提问作者Pezholio
相关产品推荐
相关产品推荐

