Amazon dynamodb AWS AppSync-删除项不存在';t执行响应映射模板

Amazon dynamodb AWS AppSync-删除项不存在';t执行响应映射模板,amazon-dynamodb,aws-appsync,vtl,Amazon Dynamodb,Aws Appsync,Vtl,尝试使用以下请求映射删除项目时: { "version" : "2017-02-28", "operation" : "DeleteItem", "key" : { "id": { "S" : "$ctx.args.id"}, "sortKey" : { "S" : "$ctx.args.sortKey"} } } 如果项目存在,它将通过响应模板处理结果,但是当项目不存在时,响应模板永远不会运行 响应模板: #set($ctx.result.status

尝试使用以下请求映射删除项目时:

{
  "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请求?

这是您正在使用的模板版本的预期执行行为(
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)

这是您正在使用的模板版本的预期执行行为(
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)