我将AWS AppSync与angular 7应用程序一起使用,并像这样初始化客户端:
let instance: AWSAppSyncClient<NormalizedCacheObject> = new AWSAppSyncClient({
url: environment.graphqlEndpoint,
region: environment.region,
auth: {
type: AUTH_TYPE.AMAZON_COGNITO_USER_POOLS,
jwtToken: async() => { //return token }
},
cacheOptions: {
dataIdFromObject: (obj : any) => `${obj.__typename}:${obj.key}`
}
});
当AppSync进行查询并且dynamodb中已经有请求的值时,它可以正常工作:
{
"data": {
"getDefaultSettings": [
{
"key": "setting_a",
"value": "true"
},
{
"key": "setting_b",
"value": "false"
}
]
}
}
该查询结果被缓存,当我进行突变时,突变的响应:
{
"data": {
"addDefaultSettings": [
{
"key": "setting_a",
"value": "false"
},
{
"key": "setting_b",
"value": "false"
}
]
}
}
使缓存通过键比较进行更新,这也可以正常工作。
但是,当dynamodb中还没有值时,提取将返回如下结果:
{
"data": {
"getDefaultSettings": [
null,
null
]
}
}
现在,此查询将被缓存,并在对结果进行突变时
{
"data": {
"addDefaultSettings": [
{
"key": "setting_a",
"value": "false"
},
{
"key": "setting_b",
"value": "false"
}
]
}
}
它无法更新缓存。因此,接下来的几次从缓存中进行查询,我仍然会得到空结果,但是我需要在收到初始put突变的突变结果后立即更新缓存。
下一个查询从服务器获取新数据后,所有其他突变都会立即更新缓存,因为现在缓存中存在具有相同键的条目。
所以我的问题只出现在初始认沽权上,我不知道该更改什么。
$util.toJson($ctx.result.data.$tableName)
要显示查询的键+空结果值?
我肯定要使用network-and-cache
选项,因为它除了初始认沽权外,效果很好。
如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:0)
您没有发布用于您的突变或解析程序的代码,所以我只是在这里猜测问题出在DynamoDB读取一致性上。
尝试将javax.servlet.ServletException: java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model
添加到AppSync中的突变响应模板中。
像这样在响应模板中构建乐观响应
XPathFactory.newInstance()