为什么我收到错误:无法在"查询"类型上查询字段xx?

sim*_*imo 12 apollo reactjs graphql apollo-client

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

[GraphQL error]: Message: Cannot query field "allStudents" on type "Query"., Location: [object Object], Path: undefined
Run Code Online (Sandbox Code Playgroud)

这是我的实现:

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));
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?这是我预期的正确答案:

{
  "data": {
    "allStudents": [
      {
        "pickUpLat": 31.9752942479727,
        "pickUpLng": 35.8438429235775
      },
      {
        "pickUpLat": 31.9754545979993,
        "pickUpLng": 35.8437478537235
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑 我使用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"}
Run Code Online (Sandbox Code Playgroud)

GraphiQL请求的有效负载:

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

所以,它们几乎相同,不知道吗?

nym*_*ora 12

我的查询的错误是我没有下载新的架构。

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

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

您可以在“ Apollo - 下载架构”中查看更多信息


Luc*_*edo 6

就我而言,我定义了一个不需要任何参数的查询,它将返回一个对象数组:

myBasicQuery: [BasicAnswer]

type BasicAnswer {
  name String
  phone String
}
Run Code Online (Sandbox Code Playgroud)

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

query myBasicQuery {
  BasicAnswer {
      name
      phone
  }
}
Run Code Online (Sandbox Code Playgroud)

仅保留 BasicAnswer 的字段解决了该问题:

query myBasicQuery {
    name
    phone
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*avi 3

对于可能正在寻找此问题的其他人,请确保您是ApolloClientapollo-client包而不是其他包导入。