You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS AppSync+Lambda后端:GraphQL DeletePost查询返回异常结果

问题排查与解决方案

嘿,这个问题我之前也碰到过!核心原因不是你的Lambda代码有问题,而是AWS AppSync的响应映射模板没有正确传递Lambda返回的结果。

第一步:先确认Lambda本身的输出是对的

先去Lambda控制台,给你的函数创建一个测试事件,模拟AppSync传过来的参数:

{
  "arguments": {
    "id": 3
  },
  "fieldName": "deletePost"
}

执行测试后,查看Lambda的返回结果,如果是{id:-1,author:"me",title:"title"},那Lambda代码完全没问题,问题出在AppSync的解析器配置上。

第二步:检查并修正AppSync的响应映射模板

  1. 打开AWS AppSync控制台,进入你的API,切换到Schema页面

  2. 在Mutation类型下找到deletePost字段,点击它旁边的解析器链接(就是那个小箭头图标)

  3. 看页面下方的响应映射模板,默认的模板很可能是类似这样的:

    {
      "id": "${context.arguments.id}",
      "author": "${context.result.author}",
      "title": "${context.result.title}"
    }
    

    看到没?这里的id被硬编码成了传入的参数值(也就是你传的3),完全忽略了Lambda返回的-1!

  4. 把响应模板改成下面两种方式之一:

    • 方式一:明确取Lambda返回的每个字段:
      {
        "id": "${context.result.id}",
        "author": "${context.result.author}",
        "title": "${context.result.title}"
      }
      
    • 方式二:直接返回Lambda的完整结果(更简洁):
      $util.toJson($context.result)
      

第三步:重新测试

保存模板后回到GraphiQL,再次执行你的deletePost mutation,这次返回的id应该就是-1了!

额外提一句:你的Lambda返回的id是数字类型,而Schema里定义的ID!通常是字符串类型,但AppSync会自动处理类型转换,不用特意修改Lambda的返回值。如果后续遇到类型报错,再把id:-1改成id:"-1"就行。

内容的提问来源于stack exchange,提问作者honkskillet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:13:52