大佬教程收集整理的这篇文章主要介绍了存储错误:应用程序试图写入一个没有提供 id 的对象,但存储中已经包含了该对象的 <connectionName> id,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
注意 - 我对 GraphQL 很陌生,我已经看到其他关于此错误的 stackoverflow 问题被报告,但他们使用的是 Apollo。在这里,我使用 AWS Amplify 和 AppSync 自己的 GraphQL 客户端。所以我无法使用这些解决方案。
tldr - 我试图从数据库中获取项目列表,但我不断收到一个神秘的网络错误和一个我不明白的存储错误。详情:-
这是我对 AWS Appsync 客户端的客户端定义:-
export const clIEnt = new AWSAppSyncclIEnt({
url: awsconfig.aws_appsync_graphqlEndpoint,region: awsconfig.aws_appsync_region,auth: {
type: awsconfig.aws_appsync_authenticationType,jwtToken: async () =>
(await Auth.currentSession()).getAccesstoken().getJwtToken(),},});
这是我的查询方法:-
ListInstitutions = () => {
clIEnt
.query({
query: querIEs.ListInstitutions,})
.then((res: any) => {
this.institutions = res.data.ListInstitutions.items;
console.log('this.institutions',this.institutions);
})
.catch((err) => {
console.error(err);
this.institutions = [];
});
};
这是我的查询定义:-
query ListInstitutions(
$filter: ModelinstitutionFilterinput
$limit: Int
$nextToken: String
) {
ListInstitutions(filter: $filter,limit: $limit,nextToken: $nextToken) {
items {
ID
name
location
city
website
phone
logo
bio
admins {
ID
name
Title
bio
createdAt
updatedAt
owner
}
classes {
nextToken
}
learners {
nextToken
}
createdAt
updatedAt
}
nextToken
}
}
控制台中的错误如下所示:-
Error: Network error: Error writing result to store for query:
query ListInstitutions($filter: ModelinstitutionFilterinput,$limit: Int,$nextToken: String) {
ListInstitutions(filter: $filter,nextToken: $nextToken) {
items {
ID
name
location
city
website
phone
logo
bio
admins {
ID
name
Title
bio
createdAt
updatedAt
owner
__typename
}
classes {
nextToken
__typename
}
learners {
nextToken
__typename
}
createdAt
updatedAt
__typename
}
nextToken
__typename
}
}
Store error: the application attempted to write an object with no provIDed ID but the store already contains an ID of ModelinstitutionConnection:undefined for this object. The selectionSet that was trying to be written is:
ListInstitutions(filter: $filter,nextToken: $nextToken) {
items {
ID
name
location
city
website
phone
logo
bio
admins {
ID
name
Title
bio
createdAt
updatedAt
owner
__typename
}
classes {
nextToken
__typename
}
learners {
nextToken
__typename
}
createdAt
updatedAt
__typename
}
nextToken
__typename
}
at new ApolloError (ApolloError.Js:37)
at queryManager.Js:326
at queryManager.Js:698
at Array.forEach (<anonymous>)
at queryManager.Js:697
at Map.forEach (<anonymous>)
at queryManager.push.lq9a.queryManager.broadcastQuerIEs (queryManager.Js:692)
at queryManager.Js:275
at ZoneDelegate.invoke (zone-evergreen.Js:372)
at Object.onInvoke (core.Js:28510)
我必须注意,当我将 cacheOptions 配置添加到 AWS Appsync 客户端定义时,此错误会消失,如下所示:-
export const clIEnt = new AWSAppSyncclIEnt({
url: awsconfig.aws_appsync_graphqlEndpoint,cacheOptions: {
dataIDFromObject: (obj: any) => `${obj.__typename}:${obj.myKey}`,});
但即使错误消失了,它实际上也不会从 dynamoDB 中获取项目。它总是返回一个空数组。
我不知道为什么会出现这种错误,即使我的所有 graphql 代码都是使用 aws amplify-cli 自动生成的,并且我正在遵循 documentation
我只希望查询从数据库中获取项目。我该怎么办?
我想通了。问题出在 GraphQL 模式定义中,我将 @auth 参数设置为仅允许某个管理员访问列表,这就是我返回一个空数组的原因。我想这个特殊的错误是由于我没有留在客户端定义中的缓存选项中。问题末尾指定的缓存选项将解决此问题。
以上是大佬教程为你收集整理的存储错误:应用程序试图写入一个没有提供 id 的对象,但存储中已经包含了该对象的 <connectionName> id全部内容,希望文章能够帮你解决存储错误:应用程序试图写入一个没有提供 id 的对象,但存储中已经包含了该对象的 <connectionName> id所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。