typescript - NestJS pipe içinde soyut denetleyicide repository'ye nasıl erişilir


CanGetPipe boru hattını içeren BaseController (Soyut) sahibiyim

export abstract class CanGetPipe implements PipeTransform {
  protected abstract readonly repository: Repository<IEntry>;
...

ve bunun için karışım

export const makeCanGetPipe = (repoName: any) =>
  mixin(
    class extends CanGetPipe {
      protected readonly repository = getConnection().getRepository<IEntity>(repoName);
    },
  );

BaseController'ın Get metodu şöyle görünüyor:

  @Get('/:id')
  @UsePipes(makeCanGetPipe(REPOSITORY_NAME_FROM_CHILD_CONTROLLER))
  getOne(@ValidateData() validate: ValidateParam, @Param('id') id: number) {
    return this.Service.get(id, validate);
  }

Alt denetleyici BaseController'dan miras almışsa, REPOSITORY_NAME_FROM_CHILD_CONTROLLER'ü alt denetleyicide nasıl ayarlayabilirim?
Veya, BaseController'a atanmış pipe içinde alt denetleyicinin repository'sine (service, bağımlılık) nasıl erişebilirim?

Cevap #1

Bence şunların kombinasyonunu kullanabilirsiniz:

  1. @SetMetadata('repoName', YOUR_VALUE) alt sınıfınızda
  2. Pipe yerine, const repoName=this.reflector.get<string>('repoName', context.getClass()); ile Guard kullanın

Bu işe yaramalı ve BaseGuard için özel depo alabileceksiniz :)