0

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

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,但我真的不知道如何为客户端创建一个将复杂对象或数组作为变量的查询。

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

4

1 回答 1

1

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

const variables = {
  settings: {
    repositories: [
      {
        name: 'name1',
        url: 'url1'
      },
      {
        name: 'name2',
        url: 'url2'
      },
    ],
  },
}
于 2019-09-09T19:33:43.690 回答