0

使用GRANDstack Starter模板项目,我将 apollo-server 与 neo4j 结合使用。我有一个CreateParticipant突变(在带有 @cypher 指令的 schema.graphql 中定义),我想将其重用于新的突变。

传递到增强模式中的简化解析器如下所示:

const resolvers = {
  Mutation: {
    UploadCSV: async (parent, { file }, context, info) => {
      // some data processing using file omitted
      const payload = { name: 'Just a name' }
      const result = resolvers.Mutation.CreateParticipant(
        parent,
        payload,
        context,
        info
      )
      return 'thanks StackOverflow'
    },
  },
}

突变在 schema.graphql 文件中定义,如下所示:

CreateParticipant(name: String!, id: ID = null): Participant
@cypher(
  statement: """
  CREATE (par:Participant {
    name: $name,
    id: coalesce($id, apoc.create.uuid())
  })
  RETURN par
  """
)

UploadCSV(file: Upload!): String

当我现在尝试通过前端上传文件时,apollo-server 在执行resolvers.Mutation.CreateParticipant(parent, payload, context, info). 有效负载是一个具有突变期望的键/值对的对象。

抛出的错误是:

错误:不知道如何处理这种类型的突变。突变不遵循命名约定。

我想知道是否通过未修改info是这不起作用的原因。

4

1 回答 1

0

不要试图在另一个内部调用突变。而是将创建参与者逻辑拉出并导入通用函数。这允许您在上传 csv 和创建参与者突变之间保持关注点的分离。

一些不错的资源:

嵌套的 Graphql 解析器

重用解析器对话

于 2020-09-04T16:03:58.077 回答