AppSync JS Resolver:DynamoDB update函数识别condition对象报错
AWS AppSync DynamoDB Update工具函数添加Condition报错问题
我尝试使用import { update } from "@aws-appsync/utils/dynamodb";来创建DynamoDBUpdateItemRequest。指定key和更新值时功能正常,但添加condition后触发错误:Property 'condition' is invalid condition object
实现代码如下:
import { update } from "@aws-appsync/utils/dynamodb"; export function request(ctx) { const updateObj = { key: { id: ctx.identity.username }, update: { name: ctx.arguments.newProfile.name, imageUrl: ctx.arguments.newProfile.imageUrl, }, // 启用此行会触发错误: condition: { expression: "attribute_exists(id)" }, }; const requestObj = update(updateObj); // 临时解决方法:将condition对象附加到生成的DynamoDBUpdateItem // requestObj.condition = { expression: "attribute_exists(id)" }; return requestObj; } export function response(ctx) { return ctx.result; }
请问这是bug问题,还是我的condition对象格式确实不正确?
这不是Bug,是你传入的condition格式不符合@aws-appsync/utils/dynamodb工具函数的要求。
该工具函数的condition参数需要遵循AppSync封装的表达式格式,不能直接用原生DynamoDB的表达式字符串。正确写法有两种:
- 标准表达式格式(带属性名占位符):
condition: { expression: "attribute_exists(#id)", expressionNames: { "#id": "id" } }
- 简化写法(工具函数支持的快捷语法):
condition: { exists: ["id"] }
你用临时方法能生效,是因为直接给生成的requestObj附加的是原生DynamoDB请求格式的condition,而工具函数内部对传入的updateObj参数有格式校验,它期望的是自身定义的封装格式,而非原生DynamoDB格式。
内容的提问来源于stack exchange,提问作者loki
相关产品推荐
相关产品推荐

