ApolloGraphQL -- ReadQuery `Field Not Found` 错误?

Posted

技术标签:

【中文标题】ApolloGraphQL -- ReadQuery `Field Not Found` 错误?【英文标题】:ApolloGraphQL -- ReadQuery `Field Not Found` Error? 【发布时间】:2018-11-19 14:49:41 【问题描述】:

我的 readQuery 正在返回一个 field not found 错误,即使该字段似乎存在于缓存中。

查询

const GETIMSFROMCACHE_QUERY = gql`
query getIMsFromCache($fromID: String!)
  instant_message(fromID:$fromID)
    id,
    fromID,
    toID,
    msgText
  
  `;

缓存解析器

client.cache.cacheResolvers = 
    Query: 
        instant_message: (_, args) => toIdValue(client.dataIdFromObject(
            __typename: 'instant_message',
            id: args.id
        )),
    ,
;

READQUERY CALL,更新中

let instant_message = cache.readQuery( query: GETIMSFROMCACHE_QUERY, variables: "fromID": fromID );

错误

Error: Can't find field instant_message("fromID":"ayqNLcA7c6r8vip3i") on object (ROOT_QUERY) 
  "getMyUserData(\"id\":\"ayqNLcA7c6r8vip3i\")": [
    
      "type": "id",
      "generated": false,
      "id": "MyUserData:ayqNLcA7c6r8vip3i",
      "typename": "MyUserData"
    
  ],
  "getMyUserData(\"id\":\"9W95z8A7Y6i34buk7\")": [
    
      "type": "id",
      "generated": false,
      "id": "MyUserData:9W95z8A7Y6i34buk7",
      "typename": "MyUserData"
    
  ],
  "Appts(\"originatingUserID\":\"ayqNLcA7c6r8vip3i\")": [],
  "instant_message(\"fromID\":\"ayqNLcA7c6r8vip3i\",\"toID\":\"9W95z8A7Y6i34buk7\")": [
    
      "type": "id",
      "generated": false,
      "id": "instant_message:126",
      "typename": "instant_message"
    ,
    
      "type": "id",
      "generated": false,
      "id": "instant_message:127",
      "typename": "instant_message"
    ,
    
      "type": "id",
      "generated": false,
      "id": "instant_message:128",
      "typename": "instant_message"
    
  ]
.

查看错误消息,ROOT_QUERY 对象上似乎存在instant_message 对象,目标用户 id,但我收到此错误。

我该如何纠正这个问题?

提前感谢大家提供任何信息。

【问题讨论】:

【参考方案1】:

解决了!这很棘手,因为原始查询的常规解析器会从两个用户中的任何一个返回的任何 IM。解析器返回来自fromIDtoID 的任何instant_messages,反之亦然

所以我认为我需要某种缓存解析器来在查询缓存时重复此操作。

最终我意识到缓存并不关心解析器中发生了什么——它会将 Instant_message 对象存储为来自fromIDtoID,而不管解析器中发生了什么。

一旦我意识到这一点,我就放弃了特殊的缓存解析器查询,并只使用最初检索到 Instant_messages 的原始查询,并首先使用相同的查询变量,并且它起作用了。 :)

【讨论】:

以上是关于ApolloGraphQL -- ReadQuery `Field Not Found` 错误?的主要内容,如果未能解决你的问题,请参考以下文章

ApolloGraphQL -- ReadQuery `Field Not Found` 错误?

ApolloGraphQL PubSub:MaxListenersExceededWarning?

为啥 NextJS 中的 ApolloGraphQL 示例使用 getStaticProps 而不是 getServerSideProps

ApolloGraphQL 和 React:组件重新挂载时避免调用查询和订阅?

ApolloGraphQL:找不到 schema.json。请明确指定。Android Studio

ApolloGraphql FileNotFoundException: source/apollo/generatedIR/debug/src (是一个目录)