使用以下请求映射尝试删除项目时:
{
"version" : "2017-02-28",
"operation" : "DeleteItem",
"key" : {
"id": { "S" : "$ctx.args.id"},
"sortKey" : { "S" : "$ctx.args.sortKey"}
}
}
如果该项目存在,它将通过响应模板处理结果,但是,如果该项目不存在,则永远不会运行该响应模板。
响应模板:
#set($ctx.result.status = "SUCCESS")
#set($ctx.result.message = "This was a success!")
$utils.toJson($ctx.result)
我知道,当Dynamo中不存在某个项目时,它将不会执行任何操作,但是我希望它仍然可以在模板中进行处理。
当文档不存在时,我是否缺少任何内容,或者AppSync是否无法通过响应映射处理DeleteItem请求?
答案 0 :(得分:2)
这是您正在使用的模板版本(2017-02-28
)的预期执行行为。
您可以将请求映射模板版本切换为2018-05-29
,然后将执行具有以下特征的响应映射模板:
如果数据源调用结果为null
,则执行响应映射模板。
如果数据源调用产生错误,则现在由您来处理错误。可以使用$ctx.error
访问调用错误。
响应映射模板评估结果将始终放置在GraphQL响应数据块中。您还可以分别使用$util.error()
和$util.appendError()
引发或附加错误。
因此,您的示例:
{
"version" : "2018-05-29", ## Note the new version
"operation" : "DeleteItem",
"key" : {
"id": { "S" : "$ctx.args.id"},
"sortKey" : { "S" : "$ctx.args.sortKey"}
}
}
和响应模板
#if ( $ctx.error )
$util.error($ctx.error.message, $ctx.error.type)
#end
#set($ctx.result.status = "SUCCESS")
#set($ctx.result.message = "This was a success!")
$utils.toJson($ctx.result)