2

我在发送到后端的前端有一个非常基本的 graphql 突变。我在 by 上使用此代码graphql-request作为指南。

使用原语它可以工作:

const mutation = gql`
    mutation EditArticle($id: ID!, $title: String) {
      editArticle(id: $id, title: $title) {
        id
      }
    }
  `

现在我还希望能够改变一些关于文章的元数据,存储在meta文章内部的一个对象中:

...,
title: "Hello World",
meta: {
 author: "John",
 age: 32,
 ...
}

所以我的问题是:使用graphql-request从前端发出请求时,如何将非原始对象类型作为参数传递给突变?

我已经尝试过这样的事情:

const Meta = new GraphQLObjectType({
    name: "Meta",
    fields: () => ({
      id: { type: GraphQLID },
      name: { type: GraphQLString },
      age ....
    }),
  })
   
const mutation = gql`
    mutation EditArticle($id: ID!, $title: String, $meta: Meta) { //??? I don't seem to get what goes here? 
      editArticle(id: $id, title: $title, meta: $meta) {
        id
      }
    }
  `

我也尝试过GraphQLObjectType,但我认为我在这里出错了(因为这是前端)。

PS:我看了这个答案,但我不明白/相信那里的解决方案可能不完整。

4

1 回答 1

4

您需要在服务器端架构中定义输入对象类型,例如

input MetaInput {
  name: String
  author: String
  release: Date
}

并在editArticle定义中使用它

extend type Mutation {
  editArticle(id: ID!, title: String, meta: MetaInput): Article
}

然后你也可以MetaInput在你的mutation EditArticle.

于 2020-12-20T19:54:30.173 回答