ClassSerializerInterceptor не применяется к результату кэширования. Пожалуйста, рассмотрите следующий пример кода. Когда я запрашиваю конечную точку API, поле private_key недоступно. Однако, если кеш доступен, я вижу поле private_key в результате.
appmodule
@Module({
controllers: [...],
exports: [AppConfigService, ...],
imports: [
...
CacheModule.registerAsync({
// eslint-disable-next-line @typescript-eslint/no-use-before-define
imports: [AppModule],
useClass: AppCacheOptionsFactory
}),
...
],
providers: [AppConfigService, ...]
})
export class AppModule {}
фабрика кеша
@Injectable()
export class AppCacheOptionsFactory implements CacheOptionsFactory {
constructor(private readonly appConfigService: AppConfigService) {}
createCacheOptions(): Promise<CacheModuleOptions> | CacheModuleOptions {
return {
host: this.appConfigService.cacheHost,
max: this.appConfigService.cacheMax,
port: this.appConfigService.cachePort,
store: redisStore,
ttl: this.appConfigService.cacheTTL
};
}
}
контроллер
...
@Get()
@UseInterceptors(HttpCacheInterceptor)
async find(): Promise<JwksEntity[]> {
return this.userService.find();
}
...
кеш-перехватчик
@Injectable()
export class HttpCacheInterceptor extends CacheInterceptor {
trackBy(context: ExecutionContext): string | undefined {
const request = context.switchToHttp().getRequest<express.Request>();
return request.path;
}
}
сущность jwks
@Entity({ name: "jwkss", orderBy: { id: "ASC" } })
export class JwksEntity {
constructor(id: string, public_key: string, private_key: string) {
this.id = id;
this.public_key = public_key;
this.private_key = private_key;
}
@PrimaryGeneratedColumn("uuid")
@IsUUID()
id: string;
@Column({ type: "text" })
@Exclude()
@IsString()
private_key: string;
@Column({ type: "text" })
@IsString()
public_key: string;
}