我正在使用Amazon DynamoDB DataMapper For JavaScript将一些模型映射到node.js(TypeScript)lambda函数中的DynamoDB表。我正在使用如下注释:
@table('Foo')
export class Foo {
@hashKey()
id: string;
@attribute()
name: string;
}
有人知道如何覆盖表名以便可以指定其他数据库吗?例如,对于开发/生产环境,这可能会有所不同。我在DataMapper或DynamoDB配置对象上看不到任何选项。
谢谢
答案 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
吸气剂能够正常工作。
请注意,在这种情况下,您仍然可以使用属性注释-它们不会冲突,因为它们在基础类构造函数上构建了单独的属性。