Гнездо JS ClassSerializerInterceptor не применяется к результату кэширования? - PullRequest
1 голос
/ 22 января 2020

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;
}
...