我在Dynamodb中的对象看起来大致如下:
{
userId: "GEFOeE8EsaWmq4NQ3oh7tbeVkLx1",
url: 'objectURL',
object: {}
}
当拥有该对象的用户请求删除时,我有这段简单的代码用于删除对象。顺便说一下,这里的用户参数是解析的JWT。
export async function deleteObject(user, url) {
let params = {
TableName: OBJECTS_TABLE,
Key: {
url: url,
},
ConditionExpression: `userId = :uid`,
ExpressionAttributeValues: {
":uid": {
S: user.sub
}
}
};
let deleteResult = await dynamoDb.delete(params).promise();
return deleteResult;
}
问题在于它无法正常工作,并且我已确保问题源于条件表达式,方法是将=
更改为<>
。我只是得到这个:
ConditionalCheckFailedException: The conditional request failed
我确定解决问题并不困难,但我几乎没有任何信息
问题:
答案 0 :(得分:0)
AWS SDK目前不支持await/async
。请参阅此类issue。
SDK当前依赖于CLS来跟踪调用上下文。它没有 现在使用async / await功能。你可以看到 讨论here。
如果删除await
,它应该有效。示例如下: -
let deleteResult = dynamodb.deleteItem(params).promise();
deleteResult.then(function (data) {
console.error("Delete item result :", JSON.stringify(data,
null, 2));
}).catch(function (err) {
console.error("Delete item result error :", JSON.stringify(err,
null, 2));
});
答案 1 :(得分:0)
我明白了。可以使用ExpressionAttributeValues,而不提及数据类型。 Javascript SDK会自动执行此操作。
export async function deleteObject(user, url) {
let params = {
TableName: OBJECTS_TABLE,
Key: {
url: url,
},
ConditionExpression: `userId = :uid`,
ExpressionAttributeValues: {
":uid": user.sub
}
};
let deleteResult = await dynamoDb.delete(params).promise();
return deleteResult;
}