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

DynamoDB UpdateItem指定ALL_NEW后AppSync返回User.id为null报错

问题根源

非空报错本质是Lambda返回值的字段映射完全不匹配DynamoDB的返回结构,具体有两个核心错误:

  1. DynamoDB的update接口调用成功后,返回的对象不会直接挂载属性,所有更新后的属性都放在Attributes字段下。你代码里直接写Item.pk相当于访问整个返回对象的pk字段,这个字段不存在,自然返回null,触发ID非空校验。
  2. 你DynamoDB里的用户属性(name、avatarUrl、createdAt等)都存储在details嵌套对象下,你代码里直接取Item.displayName等字段也完全取不到,都是undefined。
修复方案

直接修改Lambda的返回值构造逻辑,调整字段取值路径即可:

const Item = await dynamoDB.update(params).promise();
console.log(Item);
// 先取Attributes字段,再按存储层级取对应属性
const attrs = Item.Attributes;
return { 
    id: attrs.pk, 
    name: attrs.details.displayName,
    avatarUrl: attrs.details.avatarUrl,
    createdAt: attrs.details.createdAt,
    updatedAt: attrs.details.updatedAt
};
通用排查思路

遇到AppSync GraphQL非空返回报错可以按优先级排查:

  • 先检查Resolver/Lambda的返回结构是否和GraphQL schema定义的字段完全匹配,大小写、嵌套层级都要对应
  • 打印数据源(这里是DynamoDB)的原始返回,确认字段实际存储位置
  • 检查schema中定义的非空字段是否真的在返回值里有赋值,没有值的话要么补默认值要么把schema的非空标记去掉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:18:00