在Node.js中映射Azure表存储数据模型的最简单方法

时间:2016-11-07 15:37:15

标签: node.js azure azure-table-storage

当我想将我的javascript对象(或实体)添加到我的Azure表存储时,我首先需要通过entityGenerator运行它们。

我的对象可能如下所示:

{
  id: 1,
  name: 'foo',
  timestamp: new Date()
}

我需要传递给TableService的实体看起来像这样:

{
  id: { '_': 1, '$': 'Edm.Int32' },
  name: { '_': 'foo', '$': 'Edm.String' },
  timestamp:{ '_': new Date(), '$': 'Edm.DateTime' },
}

这也是从TableService返回实体的格式。

将我的对象映射到正确的格式以将它们发送到我的表存储是非常简单的,但我还没有找到一种简单的方法将返回的实体从我的服务转换回我可以轻松使用的常规JavaScript对象。

我可以创建某种通用映射器函数来从实体上的_属性中获取值,但似乎某些元数据属性也会传递给实体本身。

有没有人知道在JavaScript对象和Azure表存储实体之间进行映射的简单方法?

此功能是否(或应该)包含在azure-storage库中?

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题但决定我根本不需要我的特定DAO和应用程序(nodejs)的元数据。

结束使用result.entries上的map并返回一个已清理的对象。

  Object.keys(row).forEach((key) => {
     newRow[key] = row[key]['_']; 
  });

我同意azurestorage应该包含更直接的方式来插入和删除数据。我必须为查询构建器构建一个map / reduce包装器,以便它不会使用额外的东西充斥应用程序的其余部分。我想要一个简单的NodeJS DAO类。也许我们可以一起建立一个?

答案 1 :(得分:0)

以防其他人偶然发现:您可以访问body的{​​{1}}部分中的值。结果包含实际的表实体。

因此,要访问示例中的名称部分,请使用response

答案 2 :(得分:-1)

由于Azure Storage SDK for Node是使用Storage Rest API实现的。要使用Azure存储资源,您可以利用SDK并自行使用Rest API。

根据API参考,E.G。 Insert Entity,我们需要生成请求体,如:

{
   "Address":"Mountain View",
   "Age":23,
   "AmountDue":200.23,
   "CustomerCode@odata.type":"Edm.Guid",
   "CustomerCode":"c9da6455-213d-42c9-9a79-3e9149a57833",
   "CustomerSince@odata.type":"Edm.DateTime",
   "CustomerSince":"2008-07-10T00:00:00",
   "IsActive":true,
   "NumberOfOrders@odata.type":"Edm.Int64",
   "NumberOfOrders":"255",
   "PartitionKey":"mypartitionkey",
   "RowKey":"myrowkey"
}

这意味着我们需要定义正文中属性的类型。

因此,我认为生成表实体的最简单方法是通过entityGenerator函数使用Azure Storage SDK。

如有任何疑问,请随时告诉我。

相关问题