尽管我在GraphiQL上成功测试了graphQL查询之后,从GraphiQL工具中复制并粘贴了它,但当我在一个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
}
]
}
}
EDIT我使用GraphiQL得到预期的结果:
编辑2
我尝试比较我的请求和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"}
他们几乎一模一样,知道吗?
7条答案
按热度按时间a7qyws3x1#
我的查询的错误是我没有下载新的模式。
您可以使用以下命令下载架构:
apollo schema:download --endpoint=http://localhost:8080/graphql schema.json
将http://localhost:8080/graphql替换为您的服务器端点
您可以在https://www.apollographql.com/docs/ios/downloading-schema/上查看更多信息
2ledvvac2#
在我的例子中,我定义了一个不需要任何参数的查询,它将返回一个对象数组:
我得到的错误:
Cannot query field \"BasicAnswer\" on type \"BasicAnswer\"
时,我是这样宣告的:仅保留BasicAnswer字段解决了此问题:
2o7dmzc53#
对于可能正在搜索此问题的其他人,请确保您正在从**
apollo-client
包而不是其他包导入ApolloClient
**。t1qtbnec4#
对于任何追随apollo-client的人来说,现在已经日落西山,支持@apollo/client
下面是构造查询的方法
gxwragnw5#
更新了
@graphql-codegen/cli
包到最新版本(2.6.2),它的工作正常。凡用羽浦者也。
问题是
yhived7q6#
查看您的实体,它可能缺少@Field()注解。例如:
hgncfbus7#
如果你把graphqls文件分成碎片,并且忘记在codegen. ts中定义它,也会发生这种情况。
(Java项目)/源/主/资源:
(Angular 项目)/codegen.ts