ApolloGraphQL——ReadQuery `Field Not Found` 错误?
ApolloGraphQL -- ReadQuery `Field Not Found` Error?
我的 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 调用,更新中
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 对象上似乎存在一个具有目标用户 ID 的 instant_message
对象,但我收到此错误。
我该如何纠正?
提前感谢大家提供的任何信息。
已解决!这很棘手,因为原始查询的常规解析器会从两个用户中的任何一个返回 或 的任何 IM。解析器 returns 来自 fromID
和 toID
、 的任何 instant_messages,反之亦然 。
所以我想我需要某种缓存解析器来在查询缓存时重复此操作。
最终我意识到缓存并不关心解析器中发生了什么 -- 它会将 instant_message 对象存储为从 fromID
到 toID
,无论解析器中发生的事情。
一旦意识到这一点,我就放弃了特殊的缓存解析器查询,只使用首先检索 instant_messages 的原始查询,并首先使用与它一起使用的相同查询变量,它奏效了。 :)
我的 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 调用,更新中
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 对象上似乎存在一个具有目标用户 ID 的 instant_message
对象,但我收到此错误。
我该如何纠正?
提前感谢大家提供的任何信息。
已解决!这很棘手,因为原始查询的常规解析器会从两个用户中的任何一个返回 或 的任何 IM。解析器 returns 来自 fromID
和 toID
、 的任何 instant_messages,反之亦然 。
所以我想我需要某种缓存解析器来在查询缓存时重复此操作。
最终我意识到缓存并不关心解析器中发生了什么 -- 它会将 instant_message 对象存储为从 fromID
到 toID
,无论解析器中发生的事情。
一旦意识到这一点,我就放弃了特殊的缓存解析器查询,只使用首先检索 instant_messages 的原始查询,并首先使用与它一起使用的相同查询变量,它奏效了。 :)