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.key
null
.就像$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"
}