将对象作为参数传递给 GraphQL Mutation (graphql-request)

问题描述

我在前端有一个非常基本的 graphql 突变,我发送到我的后端。我在 by <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="class1" id="id_1"> <div class="inner">test 1</div> </div> <div class="class1" id="id_2"> <div class="inner">test 2</div> </div> 上使用 this code 作为指南。

使用原语就可以了:

graphql-request

现在我还希望能够改变有关文章的一些元数据,这些元数据存储在文章内的 const mutation = gql` mutation EditArticle($id: ID!,$title: String) { editArticle(id: $id,title: $title) { id } } ` 对象中:

meta

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

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

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

我也用 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 } } ` 尝试过,但我认为我在这里出错了(因为这是前端)。

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

解决方法

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

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

并在 editArticle 定义中使用它

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

然后您也可以在您的 MetaInput 的客户端定义中引用 mutation EditArticle 类型。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...