为接口编写 Apollo 解析器

SCB*_*SCB 1 node.js graphql apollo-server apollostack

假设我有以下 typedef:

interface Node {
  id: ID!
}

type Foo implements Node {
  id: ID!
  quantity: Int
}

type Bar implements Node {
  id: ID!
  name: String
}
Run Code Online (Sandbox Code Playgroud)

我发出的每一个ID,我都想以同样的方式处理。目前我需要一些解析器,如:

interface Node {
  id: ID!
}

type Foo implements Node {
  id: ID!
  quantity: Int
}

type Bar implements Node {
  id: ID!
  name: String
}
Run Code Online (Sandbox Code Playgroud)

使用许多类型实现Node,这会导致大量代码重复,开发人员很容易忘记编码 id 的正确方法,或者忘记将它们全部编码。

有没有办法做这样的事情?

{
  // ...
  Foo: {
    id: (root) => encodeId(root.id, root.type),
    // ...
  },
  Bar: {
    id: (root) => encodeId(root.id, root.type),
    // ...
  },
  // ...
}
Run Code Online (Sandbox Code Playgroud)

这样Foo,Bar以及 的任何其他实现Node会继承id解析器吗?

roo*_*h84 5

对于仍然在这个问题上磕磕绊绊的任何人,您可以将inheritResolversFromInterfaces标志设置makeExecutableSchematrue.

在这里找到:https : //github.com/apollographql/graphql-tools/issues/762#issuecomment-385591309

Apollo 文档在这里:https : //www.apollographql.com/docs/apollo-server/api/apollo-server/#makeexecutableschema