【问题标题】:Why does Delete method of Amazon DynamoDB not return deleted result?为什么 Amazon DynamoDB 的 Delete 方法不返回已删除的结果?
【发布时间】:2022-04-06 17:08:11
【问题描述】:

我正在为删除操作创建一个快速 api,在成功删除项目后,我希望将已删除的项目显示为响应,该项目正在从表中删除,但 API 给出 ​​empty object {} 作为从 CURL 命令运行时的响应,我正在关注这些 docs from aws

这是我的代码

router.delete('/delete/:id',function(req, res, next) {
  
  const params = {
    TableName: 'Notes',
    Key: {
      id: req.params.id,
    },
  };

  dynamoDb.delete(params, function (error,data) {
    if (error) {
      console.log(error);
      res.status(400).json({ error: 'Could not update user' });
    }
    res.status(200).json(data);
  });
})

卷曲命令

curl -H "Content-Type: application/json" -X DELETE xxxxxxxxxxxxxxx/dev/user/delete/alexdebrie2 

【问题讨论】:

    标签: node.js amazon-web-services express amazon-dynamodb


    【解决方案1】:

    DeleteItem 操作的 DynamoDB documentation 明确说明:

    除了删除一个item,你还可以在同一个操作中返回item的属性值,使用ReturnValues参数。

    因此,默认情况下,删除操作不会返回已删除项目的旧值。如果需要,您需要将 ReturnValues 选项传递给 DynamoDB 请求。我不熟悉你用来实现这个的任何编程语言,但我希望你能自己弄清楚。

    【讨论】:

    • deleteItem 不再存在 :) 请检查文档以了解 AWS 上的 nodejs 删除操作,这不能解决我的问题,如果您在我的回调中读取我的代码,则有数据参数记录从 dynamodb 返回的数据
    • DeleteItem 仍然存在于 DynamoDB API - 您需要弄清楚它是如何映射到您正在使用的特定库的
    • @peter 请查看这些文档,这是 AWS docs.aws.amazon.com/amazondynamodb/latest/developerguide/… 推荐的方式,我的删除操作有效但没有返回数据!!!!
    • 我对 node.js 一无所知,但我拒绝相信亚马逊在 node.js SDK 中隐藏了他们的一个特性——我在 Python 和 Java SDK 中都自己使用了这些特性。以下链接表明“deleteItem”功能仍然存在:docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/…
    • 我刚刚意识到我的链接来自Javascript SDK v2,现在有一个v3...我会进一步看...
    【解决方案2】:
    let params = {
        TableName: tablename,
        Key: {
          hashKey: ,`enter code here`,
          id: `enter code here`
        },
        ConditionExpression: "attribute_exists(hashKey)",// checks if item exists
        ReturnValues: 'ALL_OLD'
      };
      dynamoDB.delete(params, (error, result) => {
        if (error) {
          console.error(error);
          callback(null, {
            statusCode: error.statusCode,
            body: JSON.stringify(error),
          });
          return;
        }
        else {
          console.log(result);
        }
        // create a response
        const response = {
          isBase64Encoded: false,
          statusCode: 200,
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify(result),
        };
        console.log(response);
        callback(null, response);
      });
    })
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2012-07-28
    • 2013-03-10
    相关资源
    最近更新 更多