代码之家  ›  专栏  ›  技术社区  ›  Forrest Wilkins

NestJS-数据加载器如何与GraphQLShield结合使用?

  •  0
  • Forrest Wilkins  · 技术社区  · 1 年前

    我最近发现,因为我的一些屏蔽规则中有异步调用,这导致我的数据加载器批处理函数被多次调用,而它们本应只被调用一次,这给我留下了N+1的问题。

    我相信这是由于 dataloader 库要求所有批处理函数调用都发生在同一事件循环“tick”期间( source ),而在我的屏蔽规则中进行的异步调用阻止了这种情况的发生。

    这是 useFactory 传递给的函数 GraphQLModule 在我的 app :

      useFactory(dataloaderService: DataloaderService, usersService: UsersService) {
        return {
          context: async ({ req }: { req: Request }) => {
            const loaders = dataloaderService.getLoaders();
            const services = { usersService };
            return { loaders, services };
          },
          transformSchema: (schema: GraphQLSchema) => {
            schema = applyMiddleware(schema, shieldPermissions);
            return schema;
          },
        };
      },
    

    有没有办法同时使用数据加载器和GraphQLShield这样的授权库?我当前的配置有什么问题可能导致这种情况吗?

    0 回复  |  直到 1 年前