AWS AppSync 嵌套解析程序 - 如何重用父级的参数



Heyo.我有一个 AppSync 解析器,其中包含一个附加到解析器的字段。查询接受的参数与内部解析程序所需的参数相同。为了简洁起见,我想从上下文中传递它,而不必指定它。解析程序的数据源是一个 dynamoDB 表 假设架构看起来像

type Query {
getThings(key: String!): AResult!
}
type AResult {
getOtherThings(key: String!): String!
}

我可以这样构造一个查询

query Query {
getThings(key: "123") {
getOtherThings(key: "123")
}
}

这是笨拙和多余的。理想情况下,我只想创建一个如下所示的查询

query Query {
getThings(key: "123") {
getOtherThings
}
}

解析器可以从请求的上下文中提取key并重用它。 解析程序的请求模板如下所示getOtherThings

{
"version": "2017-02-28",
"operation": "Query",
"query": {
"expression" : "key = :key",
"expressionValues" : {
":key" : $util.dynamodb.toDynamoDBJson($context.arguments.key)
}
}
}

$context.guments.keynull.就像$context.args.key$ctx.args.key$ctx.arguments.key一样.如果我在执行时检查请求中的日志getThings我可以看到预期的参数:

{
"logType": "RequestMapping",
"path": [
"getThings"
],
"fieldName": "getThings",
"context": {
"arguments": {
"key": "123"
},
"stash": {},
"outErrors": []
},
"fieldInError": false,
"errors": [],
"parentType": "Query"
}

所以我推测父解析器 (getThings) 及其子解析器 (getOtherThings) 之间的上下文不会持久化,但我无法从日志中辨认出这一点。

这甚至可能吗 - 我在搜索 AWS 日志时快要干了

答案就在ctx.source.ctx.source是父字段的地图,所以我可以从那里抓取它。

{
"logType": "RequestMapping",
"path": [
"getThings"
], 
"source": {
"key":"123"
},
"fieldName": "getThings",
"context": {
"arguments": {
"key": "123"
},
"stash": {},
"outErrors": []
},
"fieldInError": false,
"errors": [],
"parentType": "Query"
}

相关内容

  • 没有找到相关文章

最新更新