typescript - NestJS როგორ მივიღოთ წვდომა პაიპში რეპოზიტორიაზე აბსტრაქტულ კონტროლერში
მე მაქვს BaseController (აბსტრაქტული), რომელიც შეიცავს ნილოს CanGetPipe
export abstract class CanGetPipe implements PipeTransform {
protected abstract readonly repository: Repository<IEntry>;
...
და მისთვის მიქსინი
export const makeCanGetPipe = (repoName: any) =>
mixin(
class extends CanGetPipe {
protected readonly repository = getConnection().getRepository<IEntity>(repoName);
},
);
BaseController-ის Get მეთოდი ასე გამოიყურება:
@Get('/:id')
@UsePipes(makeCanGetPipe(REPOSITORY_NAME_FROM_CHILD_CONTROLLER))
getOne(@ValidateData() validate: ValidateParam, @Param('id') id: number) {
return this.Service.get(id, validate);
}
როგორ შემიძლია ვაწესო REPOSITORY_NAME_FROM_CHILD_CONTROLLER შვილ კონტროლერში, რომელიც მემკვიდრეობით მიანიჭეს BaseController-იდან?
ან, როგორ შემიძლია მივაღწიო შვილ კონტროლერის რეპოზიტორიას (სერვისს, დამოკიდებულებას) პაიპში, რომელიც მიენიჭა BaseController-ს?
პასუხი #1
მე ვფიქრობ, რომ შეგიძლიათ გამოიყენოთ კომბინაცია:
@SetMetadata('repoName', თქვენი_შეფასება)თქვენს შვილ კლასზე- პაიპის ნაცვლად - გამოიყენეთ გარდი
const repoName=this.reflector.get<string>('repoName', context.getClass());
ეს უნდა გაამართლოს საქმე და შეძლებით მიიღოთ მომხმარებლის რეპო თქვენი BaseGuard-ისთვის :)