在 NestJS 中注入 service or class in guard

Inject service or class in guard in NestJS

需要DI Kafka client in guard:

auth.guard.ts

export class AuthGuard implements CanActivate {
  private _client: ClientKafka; <----- // TODO implement nestjs DI mechanism

  public async canActivate(context: ExecutionContext): Promise<boolean> {
    try {
      
      const request = context.switchToHttp().getRequest();
      const authorization: string = request.get('Authorization');
      ...code here just send data to jwt service...
    
      return true;
    } catch (err) {
      return false;
    }
  }
}

我在 canActivate 中使用 new 在 auth.guard.ts 中创建 Kafka 客户端实例。但是如何用@Inject 注入一个 class 来保护?我曾经创建@Global 模块,它提供和导出 Kafka 客户端 class,但它不起作用...

在全局使用守卫的模块中使用这个

providers: [{provide: APP_GUARD, useClass: AuthGuard}]

至于你关于在守卫中注入 class 的问题,你需要在 AuthGuard class

的构造函数中注入它
export class AuthGuard implements CanActivate {

constructor(private clientKafka : ClientKafka){}
}

如果这不起作用,请尝试使用

constructor(@Inject(private clientKafka : ClientKafka)){}

希望这能解决您的问题:)