amazon-dynamodb - (DynamoDB) ConditionExpression 使用“=”运算符时的行为不可预测。我怎样才能更好地调试它?
问题描述
我在 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
我确信解决问题并不难,但我几乎没有任何信息
问题:
- 为什么条件表达式失败?一切看起来都很好,它应该可以工作。对?
- 我怎样才能更好地调试这个问题?
解决方案
AWS SDK目前await/async
不支持。请参考这个类似的问题。
SDK 当前依赖 CLS 来跟踪调用上下文。它现在不适用于 async/await 功能。你可以在这里看到讨论。
如果你删除它应该可以工作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));
});
推荐阅读
- vmware - vmkperf 不完全支持 perfmon 版本 x
- reactjs - React.js 中 useState 钩子的生命周期
- asp.net - 函数比较 2 个 csv 文件的 2 列和电子邮件差异
- python - 从 for 循环的输出创建数据帧
- javascript - 在特定循环中从一组 html 项中创建一个分割的 html
- python - 针对 ubyte 数据的 python Pandas 优化(0..255)
- python - Odoo - 我如何向关注者发送自定义消息
- java - 使用 Mockito,如何匹配列表中地图的键值对?
- c++ - 如何迭代具有相同基类的元素元组
- python - 将while循环更改为for循环以查找两个生日相同的人