0

嘿嘿。我有一个 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 日志

4

1 回答 1

0

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

{
    "logType": "RequestMapping",
    "path": [
        "getThings"
    ], 
    "source": {
       "key":"123"
    },
    "fieldName": "getThings",
    "context": {
        "arguments": {
            "key": "123"
        },
        "stash": {},
        "outErrors": []
    },
    "fieldInError": false,
    "errors": [],
    "parentType": "Query"
}
于 2022-03-03T20:17:51.757 回答