【问题标题】:GraphQL mutation: Invariant Violation: Must contain a query definitionGraphQL 突变:不变违规:必须包含查询定义
【发布时间】:2019-08-07 16:13:39
【问题描述】:

我正在尝试从 react 应用程序对我的 graphQL 服务器进行 mutation 调用。反应代码如下所示:

client.query({
  query: gql`
    mutation{
        addTeam(input:{name:"Somename", label:"somelabel"})
        {error, status}
    }`
 }).then((resp: any) => {
      console.log("Success", resp);
 }).catch(err => {
      throw err;
 })

我收到以下错误:

但是,如果我将相同的请求从 mutation 更改为 query,并在我的 node-graphQL-server 中进行必要的更改以将其处理为 query 而不是 mutation,则相同的代码可以工作。

Apollo 客户端 Mutation docs says

在 GraphQL 中,突变在语法上与查询相同,唯一的区别是您使用关键字 mutation 而不是 query...

哦,顺便说一句,同样的 mutation 查询在 Playground 中有效。 请大家帮忙,因为这个问题,我的工作有点停止了。

谢谢!

【问题讨论】:

    标签: reactjs graphql apollo-client


    【解决方案1】:

    您应该使用客户端的mutate 方法进行突变,而不是query 方法。该方法的选项可以在in the docs 找到。 Apollo 对如何处理查询和突变有自己的看法,因此每种方法都有适合每个操作行为的不同选项(例如,mutate 包含一个 refetchQueries 选项)。

    client.mutate({
      mutation: gql`
        mutation {
          addTeam(input:{name:"Somename", label:"somelabel"}) {
            error
            status
          }
        }`,
    })
    

    【讨论】:

    • 非常感谢,我没有意识到我是用户“client.query”的突变。 +1
    • 天哪! “client.mutate”...谁知道?
    • 这个答案解决了我的问题,但是可以使用单个 gql 字符串而不是 mutation 对象(其中 mutation 使用两次)来完成吗?我正在使用来自Apollo Client docs@rest 呼叫。他们使用gql 查询字符串,后跟client.query({ query }) api 调用。好奇是否可以使用您在此处使用的相同输入。
    • 您的文档链接失效了,能否更新一下?
    【解决方案2】:

    目前有一个 GitHub 问题提到了这个错误:https://github.com/apollographql/apollo-client/issues/1539

    【讨论】:

      猜你喜欢
      • 2022-10-18
      • 2018-11-14
      • 2020-03-20
      • 2017-08-24
      • 2020-05-09
      • 2017-10-18
      • 2018-11-10
      • 1970-01-01
      • 2021-02-13
      相关资源
      最近更新 更多