用阿波罗突变数组

时间:2019-09-09 18:16:59

标签: javascript graphql apollo apollo-client graphql-mutation

我有一个具有这种突变类型的服务器端模式

type Mutation {
  updateSettings(settings: SettingsInput): Settings
}
input SettingsInput {
  repositories: [RepositoryInput]
}
input RepositoryInput {
  id: String
  name: String
  url: String
}

如果我使用Altair之类的客户端,可以通过此查询完全更改该变量:

mutation{
  updateSettings(settings: {
    repositories: [
      {
         name: "name1"
         url: "url1"
      },
      {
         name: "name2"
         url: "url2"
      }
    ]
  }){
    repositories {
      id
      name
      url
    }
  }
}

但是在使用Apollo时,我一直在努力使其工作

我能得到的最好的是这个

import { SubscriptionClient } from "subscriptions-transport-ws";
import { gql } from "apollo-boost";
import { WebSocketLink } from "apollo-link-ws";

const wsClient = new SubscriptionClient("ws://localhost:5001/graphql", {
  reconnect: true
});
const client = new WebSocketLink(wsClient);
const UPDATE_SETTINGS = gql`
  mutation UpdateSettings($settings: SettingsInput) {
    updateSettings(settings: $settings) {
      repositories {
        id
        name
        url
      }
    }
  }
`;
client
      .request({
        query: UPDATE_SETTINGS,
        variables: { repository: [{name: "name1", url:"url1"},
                                  {name: "name2", url:"url2"}]}
      })

我显然想念一些东西。客户端似乎并不了解服务器SettingsInput,但是我真的无法弄清楚如何为客户端创建一个以复杂对象或数组作为变量的查询。

我是要以一种完全怪异的方式来解决这个问题,还是要如何从apollo客户端向服务器发送“复杂”的突变?

1 个答案:

答案 0 :(得分:1)

除了客户端,您还需要修复要传入的variables对象。在操作中定义的变量名为settings,但您只传入一个变量名为repository。此外,此变量的形状与架构中显示的SettingsInput不匹配。 variables应该类似于:

const variables = {
  settings: {
    repositories: [
      {
        name: 'name1',
        url: 'url1'
      },
      {
        name: 'name2',
        url: 'url2'
      },
    ],
  },
}
相关问题