DynamoDB DocumentClient执行put操作后无返回数据,本地sls offline环境
问题原因&解决方案
1. Put操作ReturnValues参数配置错误
你当前put请求的ReturnValues设置为ALL_OLD,该枚举值仅当你覆写已存在的DynamoDB条目时,才会返回被覆盖的旧数据。你现在是新增全新条目,不存在旧数据,所以location.Attributes必然为空,这是符合DynamoDB API设计的正常行为。
如果你需要返回写入的条目,直接返回你构造完成的toCreateLocation对象即可,因为你已经确认数据写入成功:
try { await this.client .put({ TableName: this.tableName, Item: toCreateLocation, // 新增场景不需要配置ReturnValues }) .promise(); // 直接返回构造好的新对象 return toCreateLocation; } catch (err) { console.log(err); return {} as LocationEntity; }
如果确实需要DynamoDB返回写入后的新数据,需要改用update操作,将ReturnValues设置为ALL_NEW。
2. 本地端点配置错误
检查环境变量DYNAMO_DB_ENDPOINT的取值:
- 必须带
http://前缀,正确格式为http://127.0.0.1:8000,不要仅写localhost:8000,避免DNS解析异常导致请求卡住 - 如果你是在Docker容器中运行
sls offline,需要将DynamoDB的端点改为Docker宿主机的访问地址,且保证两个容器在同一Docker网络下
3. 权限/调用逻辑检查
- 如果你开启了
serverless-offline的IAM模拟功能,需要在serverless.yml中为Lambda配置dynamodb:PutItem、dynamodb:GetItem的对应操作权限 - 检查
createLocation的上层调用代码,必须加await关键字调用该异步方法,否则会拿不到返回结果 - Get操作无返回时,检查传入的主键是否完整:必须同时传分区键+排序键(如果表设置了排序键),缺省会返回空结果且不会抛出异常
内容的提问来源于stack exchange,提问作者Vinicius Bass
相关产品推荐
相关产品推荐

