【问题标题】:Easiest way to map Azure Table Storage Data Model in Node.js在 Node.js 中映射 Azure 表存储数据模型的最简单方法
【发布时间】:2023-03-07 07:07:01
【问题描述】:

当我想将我的 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 库中?

【问题讨论】:

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


    【解决方案1】:

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

    最终在 result.entries 上使用 map 并返回一个已清理的对象。

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

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

    【讨论】:

      【解决方案2】:

      万一其他人偶然发现:您可以访问responsebody 部分中的值。结果包含实际的表实体。

      所以要访问示例中的名称部分,请使用response.body.name

      【讨论】:

        【解决方案3】:

        因为适用于 Node 的 Azure 存储 SDK 是使用 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"
        }
        

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

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

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

        【讨论】:

        • 我了解 entityGenerator 的需求,但我想知道是否可以从 TableService (github.com/Azure/azure-storage-node/blob/master/lib/services/…) 返回原始值。一旦从我的表中获取它们,我就不需要我的 JavaScript 对象上的所有这些 OData 类型和元数据。有没有办法从 odatahandler 返回这个 rawEntity?
        猜你喜欢
        • 1970-01-01
        • 2016-08-27
        • 2018-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-01
        • 2013-02-03
        • 1970-01-01
        相关资源
        最近更新 更多