在 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)){}
希望这能解决您的问题:)
需要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)){}
希望这能解决您的问题:)