【问题标题】:为什么我收到错误:无法在“查询”类型上查询字段 xx?
【发布时间】:2018-10-30 06:18:27
【问题描述】:

虽然我在 GraphiQL 成功测试后从 GraphiQL 工具复制并粘贴了 graphQL 查询,但当我在 reactJS 应用程序中的 Apollo 客户端中尝试时,查询返回错误:

[GraphQL error]: Message: Cannot query field "allStudents" on type "Query"., Location: [object Object], Path: undefined

这是我的实现:

const link = createHttpLink({
  uri: 'http://localhost:8000/graphql',
  fetchOptions: { method: "POST" }
});

const client = new ApolloClient({
  link: link 
});

const GET_STUDENTS = gql`
query getStudents($schoolID: Int!){
  allStudents(schoolId: $schoolID){
    pickUpLat
    pickUpLng
  }
}
`;

client
  .query({
    query: GET_STUDENTS,
    variables: { schoolID: 1 }
  })
  .then(result => console.log(result));

可能出了什么问题?这是我预期的正确答案:

{
  "data": {
    "allStudents": [
      {
        "pickUpLat": 31.9752942479727,
        "pickUpLng": 35.8438429235775
      },
      {
        "pickUpLat": 31.9754545979993,
        "pickUpLng": 35.8437478537235
      }
    ]
  }
}

编辑 我使用 GraphiQL 得到了预期的结果:

EDIT2

我尝试比较我的请求和 GraphiQL 请求之间的负载:

我的请求的有效负载:(它有__typename,我不知道为什么)

{"operationName":"getStudents","variables":{"schoolID":1},"query":"query getStudents($schoolID: Int) {\n  allStudents(schoolId: $schoolID) {\n    pickUpLat\n    pickUpLng\n    __typename\n  }\n}\n"}

GraphiQL 请求的负载:

{"query":"query getStudents($schoolID: Int!){\n  allStudents(schoolId: $schoolID){\n    pickUpLat\n    pickUpLng\n  }\n}","variables":{"schoolID":1},"operationName":"getStudents"}

那么,它们几乎是相同的,你知道吗?

【问题讨论】:

  • 你的变量是 schoolId 并且查询它是 $schoolID 这可能是问题
  • 我发现它应该是 schoolID 而不是 schoolId ,我也试过 $schoolID 但得到了同样的错误,请参阅上面的编辑,它表明 schoolID 是正确的 var QUERY VARIABLES 部分中的名称.. 如何获取有关错误的更多详细信息?
  • 您使用的是哪个版本的apollo-client?你应该为客户端配置一个缓存,比如apollo-cache-inmemory,如果你没有这样做就尝试使用它,通常你的客户端会抛出一个错误

标签: reactjs graphql apollo apollo-client


【解决方案1】:

我的查询的问题是我没有下载新架构。

您可以使用以下方式下载架构:apollo schema:download --endpoint=http://localhost:8080/graphql schema.json

将 http://localhost:8080/graphql 替换为您的服务器端点

您可以在https://www.apollographql.com/docs/ios/downloading-schema/查看更多信息

【讨论】:

    【解决方案2】:

    在我的例子中,我定义了一个不需要任何参数的查询,它会返回一个对象数组:

    myBasicQuery: [BasicAnswer]
    
    type BasicAnswer {
      name String
      phone String
    }
    

    当我这样声明时,我收到了错误:Cannot query field \"BasicAnswer\" on type \"BasicAnswer\"

    query myBasicQuery {
      BasicAnswer {
          name
          phone
      }
    }
    

    只保留 BasicAnswer 的字段解决了这个问题:

    query myBasicQuery {
        name
        phone
    }
    

    【讨论】:

      【解决方案3】:

      对于可能正在搜索此问题的任何其他人,请确保您是从 apollo-client 包而不是其他包导入 ApolloClient

      【讨论】:

        猜你喜欢
        • 2021-10-09
        • 2021-06-03
        • 2021-09-02
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        • 2021-07-26
        • 1970-01-01
        • 2021-02-03
        相关资源
        最近更新 更多