我试图用用haskell编写的服务器测试APQ。以下是我编写的用于测试的示例Apollo客户端代码:
const { createPersistedQueryLink } = require("apollo-link-persisted-queries")
const { createHttpLink } = require("apollo-link-http")
const { InMemoryCache } = require("apollo-cache-inmemory")
const { ApolloClient } = require("apollo-client")
const { gql } = require('apollo-server');
const { ApolloLink } = require("apollo-link")
const fetch = require("node-fetch")
const link = ApolloLink.from([
createPersistedQueryLink(),
createHttpLink({
uri: "http://localhost:8080/v1/graphql",
fetch: fetch,
headers: {
"admin-secret":"password"
}
})
]);
const client = new ApolloClient({
cache: new InMemoryCache(),
link: link
})
async function main() {
const response = await client
.query({
query: gql`
query {
child {
name
}
}`
})
console.log(response.data)
}
main().catch(err => console.log("Err:", err))
但是,每当我运行此文件时,都会出现以下错误:
graphQLErrors: [
{
extensions: [Object],
message: "the key 'query' was not present"
}
],
当我检查POST正文中发送的Request正文时,得到以下信息:
{"operationName":null,"variables":{},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"0832c514aef4b1a6d84702e8b2fab452cbb0af61f0a1c4a4c30405e671d40527"}}}
它告诉您查询不是在帖子正文中发送的。这可能是我收到上述错误的原因。
因此,我现在很困惑:see_no_evil:
我阅读了成千上万的博客,但不清楚在未提供{ useGETForHashedQueries: true }
选项时使用哪种HTTP方法。从上面的实验来看,好像-使用了POST方法。
但是如果使用POST方法,为什么查询不发送到POST正文中。
BUT
当我使用{ useGETForHashedQueries: true }
选项时,它可以正常工作。我在这里可能做错了什么?
如果有人能帮我解决这个问题,那就太好了。