0

假设使用 library 构建了以下类型的 graphql 模式nexus-prisma

  • Root : 包含 A 的 id 和列表
  • A : 包含 B 的 id 和列表
  • B : 包含 C 的 id 和列表
  • C : 包含 id

我有一个这样构建的graphqlServer:

import { GraphQLServer } from 'graphql-yoga';
import { prisma } from '../generated/prisma-client';
const server = new GraphQLServer({
  schema,
  context: (request) => ({ request, prisma })
});

和一个用户定义的解析器:

const Query = prismaObjectType({
  name: 'Query',
  definition: (t) => {
    t.field('aWithABC', {
    type: 'Root',
    args: {},
    list: true,
    resolve: async (parent, args, ctx) => {
      // The following line returns everything I need within 50ms
      return ctx.prisma.roots().$fragment('{ id A { id B { id C { id } } } }')
    }
  }
})

当我使用路由“aWithABC”和{ id A { id B { id C { id } } } }解析器中的片段调用服务器时,解析器非常快,并且只对我的 PosgreSQL 服务器执行一个请求,这很棒。

我的问题是,不久之后,graphql 模块向 PostreSQL 发出数百个请求来解析嵌套字段,这需要几秒钟,而它所需要的只是解析器的结果。

有没有办法告诉 graphql 模块在我的解析器之后不需要执行更多请求?

为什么 graphql 模块发出数百个请求,而它只能使用正确的片段调用“prisma.roots()”?

编辑:包的版本:

graphql: "^14.6.0"
graphql-yoga: "^1.18.3"
nexus": "^0.11.7"
nexus-prisma: "^0.3.7"
prisma-client-lib: "^1.34.10"

and my prisma server is running on a docker with image prismagraphql/prisma:1.34
4

0 回答 0