尝试更新 DynamoDB 中不存在的数据,returns "Internal server error"

tried to update not exist data in DynamoDB, returns "Internal server error"

我正在使用 DynamoDBAWS Lambda

我正在写关于更新数据的代码,但是我遇到了麻烦。

export const updateData = async (event) => {
  try{
    const { email, uid } = JSON.parse(event.body);
    const params = {
      TableName: "MY_TABLE",
      Key: { "email": email, "uid": uid },
      UpdateExpression: "set updatedAt = :now",
      ConditionExpression: "email = :email and uid = :uid",
      ExpressionAttributeValues: {
        ":email": email, ":uid": uid, ":now": moment().unix()
      },
      ReturnValues: "ALL_NEW"
    };
    const data = await DYNAMO_DB.update(params, (err, data) => {
      if(err) throw err;
      return data;
    }).promise();
    return { statusCode: 200, body: JSON.stringify({msg: "SUCCESS"});
  }catch(e){
    return { statusCode: 500, body: JSON.stringify({...e, msg: "ERROR"});
  }
}

我有2个案例要测试。

CASE1

我请求更新存在于MY_TABLE

中的数据

在这种情况下,效果很好。

CASE2

我请求更新MY_TABLE

中不存在的数据

它returns

{
    "message": "Internal server error"
}

我不希望出现正常情况,但我相信它会被扔到 catch()

我希望看到 { statusCode: 500, body: JSON.stringify({...e, msg: "ERROR"});

所以,当我更新到不存在的数据时,我怎么能看到。

DynamoDB 应该使对不存在的项目的请求失败,因为您指定的 ConditionExpression 将不会得到满足。正如所解释的那样 in the DynamoDB documentation 在这种情况下您将得到的错误将具有 HTTP 代码 400,并且其正文(采用 JSON 格式)将包含错误类型 "ConditionalCheckFailedException"。在这种情况下,您绝对不会期望获得 HTTP 代码 500 ("Internal Error") - 这只会在 DynamoDB 遇到意外问题而非正常请求的极少数情况下发生。

会不会是这个错误消息不是来自 DynamoDB,而是来自您设置中的其他层?您能否尝试将同样的请求直接发送到 DynamoDB 并查看它的响应?