typescript - NestJS如何在管道中访问抽象 Controller 中的存储库

标签 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);
    },
  );

BaseControlle 的 Get 方法如下所示:

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

我如何在子 Controller 中设置REPOSITORY_NAME_FROM_CHILD_CONTROLLER而不是从BaseController继承?
或者,我如何访问分配给 BaseController 的管道中子 Controller 的存储库(服务、依赖项)?

最佳答案

我认为你可以使用以下组合:

  1. @SetMetadata('repoName', YOUR_VALUE)在您 child 的类(class)
  2. 代替管道 - 使用 Guard const repoName = this.reflector.get<string>('repoName', context.getClass());

这应该可以解决问题,您将能够为您的 BaseGuard 获得自定义存储库:)

关于typescript - NestJS如何在管道中访问抽象 Controller 中的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67125715/

相关文章:

angular - 模块 'DataTable' 导入的意外指令 'AppModule'

websocket - Nest js websocket 连接不适用于 Angular 11

javascript - 使用 env 文件的 NestJs TypeORM 配置

asp.net-mvc - Visual Studio 中使用 TypeScript 的 lib.d.ts 中出现 100 多个错误

nestjs - 如何将 fastify 速率限制器应用于 Nest JS 中的单个路由?

node.js - NestJS 访问管道中的响应对象

node.js - 如何使用 nestjs 和 socket.io 创建房间

javascript - 避免在 typescript 中添加字符串和数字?

Angular 2 : No component factory found for function HomeComponent

angular - 用于 Angular 自定义排序网格列的 Kendo UI