具有数组类型的 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 突变

在 Graphcool / GraphQL 中发布更新突变时如何“更新”数组/嵌套字段?

如何从graphql突变返回令牌