javascript - 我在使用 Node js 对 dynamoDB 中的表执行更新操作时遇到 ConditionalCheckFailedException

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

我正在尝试使用 coveritlive 聊天系统创建虚假的观众应用程序。为此,我创建了不同的 lambda 函数,一种用于发布评论,一种用于获取项目 ID,一种用于添加对评论的回复。 但是为了实现回复服务,我需要获取评论的 item_id,我可以通过调用 coveritlive.com 的事件/数据 API 来获取它。 但是在 Amazon DynamoDB 中执行更新操作时出现以下异常。我不知道为什么会显示此异常。另外我想知道是否有任何可用的批量更新功能。请帮我解决这个问题。

ConditionalCheckFailedException: The conditional request failed at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27) at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20) at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:
06179d64-8906-11e8-bc53-f1cb2c5efa4e    { ConditionalCheckFailedException: The conditional request failed
at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
message: 'The conditional request failed',
code: 'ConditionalCheckFailedException',
requestId: 'JVQV9VI69F3T2UDG6388RLDPFBVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 4.294909454040329

这是我用于更新的代码:

function updateItemId(id,itemId,docClient) {
    var updateParams = {
        TableName:"comments",
        Key: {
            Id : Number(id)
        },
        UpdateExpression: "set ItemId = :ItemId",
        ConditionExpression: "ItemId = :x",
        ExpressionAttributeValues:{
            ":ItemId":Number(itemId),
            ":x":0
        },
        ReturnValues:"UPDATED_NEW"
    };
    docClient.update(updateParams,function(err,data){
        if(err) {
           console.log(err);
        }
        else{
            console.log(data);
        }
    });
}

我正在尝试通过频繁调用来替换 ItemId。

最佳答案

原因是匹配key的item中的"ItemId"不等于0,所以会抛出ConditionalCheckFailedException异常。

如果为什么不匹配并不重要,您需要做的就是捕获并忽略它。

if (err.code === 'ConditionalCheckFailedException') {
    // nerver mind.
}

关于javascript - 我在使用 Node js 对 dynamoDB 中的表执行更新操作时遇到 ConditionalCheckFailedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365148/

相关文章:

amazon-web-services - AWS 雅典娜 : Filter only numeric entries on a column

amazon-web-services - 配置单元查询抛出错误输入字符串: “__HIVE_D”不是整数

JavaScript 提交错误的表单

javascript - 多用户问题 Node.js

javascript - 文本字段上的 onKeypress Enter Key 事件在 Chrome 中不起作用

javascript - 使用命名空间时 Socket.io 客户端忽略端口 [错误?]

javascript - 作为参数传递的函数的系统唯一 ID (javascript)

javascript - 显示输入类型文本的数量等于我的输入文件中选定文件的数量,无需发送表单

node.js - Express.js 的外部配置

python - Elastic Beanstalk 无法安装包