DynamoDB createTable(如果不存在)

时间:2016-05-19 17:47:59

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

您需要在DynamoDB上创建一个表。问题是,如果它存在createTable响应是错误的。我该如何避免这种情况。因为我在发生错误时会发出通知,但在这种情况下,我不想这样做。

我不想比较错误代码,因为ResourceInUseException对它来说太模糊了。另外,我认为首先发送一个描述表请求并不是一个合适的解决方案。

有没有办法createIfNotExists

2 个答案:

答案 0 :(得分:8)

由于您不喜欢describeTable(),我认为listTables()是您唯一的选择,例如

const tableName = // ...
const tablePromise = dynamodb.listTables({})
    .promise()
    .then((data) => {
        const exists = data.TableNames
            .filter(name => {
                return name === tableName;
            })
            .length > 0;
        if (exists) {
            return Promise.resolve();
        }
        else {
            const params = {
                TableName: tableName,
                // more params
            }; 
            return dynamodb.createTable(params).promise();
        }
    });

注意,如果您有超过100个表格,结果将被分页,您必须反复拨打listTables(),有关详情,请参阅api docs中的ExclusiveStartTableNameLastEvaluatedTableName

答案 1 :(得分:3)

另一个可能的解决方案是检查err.code和err.message。 “err.message”给出了确切的原因。

if (err.code === "ResourceInUseException" && err.message === "Cannot create preexisting table") {
        console.log("message ====>" + err.message);
    } else {
        console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2)); 
    }