使用Amazon DynamoDB DataMapper for JavaScript时覆盖表名称

时间:2018-10-23 14:50:33

标签: node.js amazon-web-services aws-lambda amazon-dynamodb

我正在使用Amazon DynamoDB DataMapper For JavaScript将一些模型映射到node.js(TypeScript)lambda函数中的DynamoDB表。我正在使用如下注释:

@table('Foo')
export class Foo {

    @hashKey()
    id: string;

    @attribute()
    name: string;
}

有人知道如何覆盖表名以便可以指定其他数据库吗?例如,对于开发/生产环境,这可能会有所不同。我在DataMapper或DynamoDB配置对象上看不到任何选项。

谢谢

2 个答案:

答案 0 :(得分:0)

定义映射器时,可以根据环境放置前缀。我将dev_用于开发数据库,​​并且在生产中没有前缀:

const prefix = process.env.NODE_ENV != "production" ? _dev : ""     
const mapper = new DataMapper({
        client: new DynamoDB({region: 'us-west-2'}), // the SDK client used to execute operations
        tableNamePrefix: prefix // optionally, you can provide a table prefix to keep your dev and prod tables separate
    });

答案 1 :(得分:0)

如果您愿意避免使用@table批注,则可以实现自己的自定义属性getter,如DataMapper documentation所示(在撰写本文时,Getting Started中的第二个代码块)。

请注意,该示例(使用this.id)有点误导性:在put / update / delete情况下(通常将构造一个记录对象提供给DataMapper),您将能够进行设置this.id或您用来计算表名的其他任何字段。但是在查询/扫描的情况下,DataMapper使用您提供的构造函数来构建结果对象,您将没有机会。在给定的示例中,this.id在扫描或查询中未定义。在这种情况下,您需要确保您的DynamoDbTable吸气剂能够正常工作。

请注意,在这种情况下,您仍然可以使用属性注释-它们不会冲突,因为它们在基础类构造函数上构建了单独的属性。