具有数组类型的 Graphql 突变
Posted
技术标签:
【中文标题】具有数组类型的 Graphql 突变【英文标题】:Graphql Mutation with Array types 【发布时间】:2020-09-22 16:07:54 【问题描述】:我正在尝试编写一个突变查询,它与 graphql 完美配合
mutation($project: ProjectsInput)
NewProject(project: $project)
name,
namespace,
environments
env,
这些是查询变量
"project":
"name": "Pr1",
"namespace": "Pr2",
"environments":
["env": "rec","env": "dev"]
这就是它的外观 graphql mutation 现在我正在尝试使用 Apollo Client 来构建这种突变,就像这样
createProject()
this.apollo.mutate(
mutation: gql`
mutation($project: ProjectsInput)
NewProject(project: $project)
name,
namespace,
environments
env,
`,
variables:
project:
name: "sth",
namespace: "sth2",
env: [
env:"env1",
env:"env2"
]
).subscribe(data =>
console.log('New project created!', data);
);
但是由于 Array 类型的变量 $env,我收到了 Http 失败响应。我想将数组作为变量传递给 apollo 客户端中的查询。我对字符串类型的变量没有问题,但是数组对象会导致此错误。
【问题讨论】:
使用 graphiql 文档检查突变签名 - 可能是一个输入变量 - 将所有数据作为一个输入对象(匹配一个输入变量)传递,尝试使用 graphiql 使用query variables
(以下查询)...然后使用代码(apollo-client)
感谢您的回复,实际上我尝试了两个输入变量并且效果很好。问题是我与数组列表类型堆叠在一起。我想动态地持久化该对象数组。问候
【参考方案1】:
NewProject(project:
表明您的NewProject
突变需要一个project
参数
将查询更改为
mutation($project: ProjectsInput)
NewProject(project: $project)
name,
namespace,
environments
env,
并将一个,整个对象传递给变量project
在graphiql
中使用query variables
来定义测试变量:
project:
name: "sth",
namespace: "sth2",
environments: [
env:"env1",
env:"env2"
]
然后在客户端为project
变量准备相同类型的对象(当然,其结构与您的突变输入类型匹配)。
【讨论】:
谢谢先生,但这不是问题。查询工作正常。问题是数组“env”的大小不是静态的(一个项目有很多由管理员修复的环境)。字符串变量不会导致问题。在这种情况下,当我从 apollo 请求中删除 $env 变量时它工作正常,但是当我添加数组时出现错误。 显示您的突变签名 - 来自 graphiql ...和此突变中使用的输入类型定义 我已经编辑了帖子。我想要做的是将对象数组添加到 apollo 客户端 request.regards 什么都没有改变 .... 只有我们知道输入类型名称;)ProjectsInput
,仍然准备一个对象,首先在 graphiql 中尝试(使用查询变量!!不是硬编码结构和传递子属性),然后在代码中重新创建
我按照你说的做了,我再次编辑了这篇文章。我现在正在使用图片中的查询变量(在帖子中编辑)。问题实际上不在后端 Api 中,而是在 apollo 客户端请求中。我希望我能理解你想要告诉我的内容。谢谢以上是关于具有数组类型的 Graphql 突变的主要内容,如果未能解决你的问题,请参考以下文章
如何将具有多个对象的状态数组作为参数传递给graphql突变?
Prisma、GraphQL 和 Apollo 中具有突变的数据关系和连接类型
Graphql type-graphql如何传递一个对象数组突变
如何:具有动态区域/组件的 Strapi GraphQL 突变