尝试更新 DynamoDB 中不存在的数据,returns "Internal server error"
tried to update not exist data in DynamoDB, returns "Internal server error"
我正在使用 DynamoDB
和 AWS 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 并查看它的响应?
我正在使用 DynamoDB
和 AWS 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 并查看它的响应?