示例Apollo客户端代码以测试APQ(自动持久查询)

时间:2020-09-23 18:34:02

标签: node.js graphql apollo apollo-client apollo-server

我试图用用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 }选项时,它可以正常工作。我在这里可能做错了什么?

如果有人能帮我解决这个问题,那就太好了。

0 个答案:

没有答案