DynamoDB DeleteItem显然不起作用-未给出错误

时间:2018-09-07 17:17:24

标签: javascript node.js amazon-dynamodb aws-sdk

我使用的是put和get,没有问题,但是删除时什么也没发生。这是我的代码:

async function resetUserIdDB(userId) {
  let params = {
    TableName: 'TableName',
    "Key": {
      "userId": {
        "S": userId.toString()
      }
    }
  };
  try {
    const dbResponse = await ddb.deleteItem(params).promise();
    console.log(`dbresponse has params of ${JSON.stringify(params)} and response of ${JSON.stringify(dbResponse)}`);
    if (dbResponse.Item) {
      console.log(`deleted row with userId of ${userId}`);
      return (dbResponse);
    }
  } catch (err) {
      console.log(`user reset failed with ${err}`);
    throw new Error(`failed to reset because of ${err}`);
  }
}

所有参数看起来都很好,但是我只是得到一个空响应,没有错误,但是也没有删除。我在其他所有的dynamodb动作上都使用了相同的.promise()。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我只是遇到了同样的问题。除非您为它们提供了一个callback参数,即使它是可选的,但似乎某些SDK函数实际上并不会起作用。甚至一个什么都不做的功能似乎也使其起作用。即

const dbResponse = await ddb.deleteItem(params, () => {}).promise();

答案 1 :(得分:0)

当您删除Dynamodb中的元素而没有任何反应时,这意味着找不到该密钥,因此请仔细检查您的密钥。

该表存在,否则您将出现一个错误提示

  

com.amazonaws.services.dynamodb.model.ResourceNotFoundException:   找不到请求的资源(服务:AmazonDynamoDB;状态代码:   400;错误代码:ResourceNotFoundException;请求ID

例如要在表中删除: TABLEXAMPLE 键:{id: "client", sortingKey: "TTN-BPLAN-7129-6114"}

检查ID是否存在和正确,以及排序键是否正确

答案 2 :(得分:0)

不确定,但是以下内容通常可以帮助调试:

  1. 尝试在测试时删除异步/等待。
  2. 在调用“ deleteItem”之后删除“ promise()”(尝试一次测试一件事)。
  3. 不要从catch块抛出,而是返回err。
  4. “键”对象用引号引起来。它可能不必像TableName一样用引号引起来。

基本上,使代码更简单。它将有助于调试。