node.js - 从 AWS DynamoDB 中的 `ConditionalCheckFailedException` 获取更多详细信息?

标签 node.js amazon-web-services aws-lambda amazon-dynamodb

在 DynamoDB 中,可以像这样在单个属性上设置 ConditionExpression:

ConditionExpression: 'attribute_exists(user_id)'

如果此 ConditionExpression 是在更新时定义的,并且 user_id 不存在,则 ConditionExpression 的计算结果为 false 并返回异常:

message: 'The conditional request failed',
code: 'ConditionalCheckFailedException',
requestId: 'KPFMA7S5P110FCOMLPMKP15UDBVV4KQNSO6AEMVJF66Q9ASUAAJG',
statusCode: 400

虽然只有一个条件可以评估一切都清楚,但是当指定多个条件时,DynamoDB 不会报告哪个条件失败:

ConditionExpression: 'attribute_exists(user_id) and iq = 85'

then exception 与上面相同,因此无法说出究竟是什么导致条件评估为 false。

有没有办法(甚至是 hacky 的)从该异常信息中获取更多详细信息?

最佳答案

不幸的是,DynamoDB 不会提供任何额外的详细信息 - 它不会告诉您 ConditionExpression 的哪一部分失败了。

我唯一能想到的就是在运行更新表达式之前或之后立即执行查询,比较必要的属性,然后记录结果。

如果您在更新之前运行查询,您可以根据需要执行或跳过更新。实际上,您将实现自己的条件处理。

或者,您可以在更新 try block 之后将查询作为 catch block 的一部分执行,这样查询只会在更新失败时运行。

关于node.js - 从 AWS DynamoDB 中的 `ConditionalCheckFailedException` 获取更多详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48319889/

相关文章:

javascript - Node.js 异步系列无法按顺序工作

用于匹配正整数和负整数的 Javascript RegEx

node.js - AWS lambda 函数在超时错误后停止工作

javascript - 使用nodejs和Lamda正确设置rest api格式

node.js - 微软 bot 框架结束时的回调

node.js - 是否建议在安装 Node 后更新 npm?

javascript - 处理动态日期差异

node.js - 为什么我无法使用 Lambda 函数将文件上传到 s3?

node.js - Firestore 无法与 AWS Lambda 配合使用

python - AWS Cognito 和 Lambda : add federated identity to user pool