在nodejs的Azure表存储中插入实体时添加分区键属性

时间:2014-07-25 04:26:42

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

在调用insertEntity()时,这更像是寻求帮助的帮助。

我在Azure上使用Nodejs并在摩纳哥进行编辑,并且我已经在NPM上安装了最新版本的azure存储。

我遇到的例外是:(底部的完整堆栈跟踪)

  

Unaught exception:错误:函数entityOperation的参数entityDescriptor.PartitionKey应该是ArgumentValidator的对象._.extend.object

我基本上将我的对象保存,并创建了2个新属性:PartitionKeyRowKey。我给他们字符串值。我following the examples。我没有使用entityGenerator,因为这里的示例不是,而Azure Node开发人员门户网站上的示例也是如此。如果需要,我不介意在特定于存储的属性上使用entityGenerator,但是节点azure github repo中的示例似乎暗示您可以使用简单的字符串。实际上,entityGenerator看起来有点丑陋和笨重,因为当你把它带回来时,你必须在实体周围编写额外的代码。

如何调整代码以解决此问题并成功调用insertEntity()

exports.saveTally = function(tally, callback) {
    var tableSvc = getAzureTableService();
     tableSvc.createTableIfNotExists("tally", function(error, result, response) {
if (!error) {    
  tally.PartitionKey="tally";
  tally.RowKey = tally.id;       
  tableSvc.insertEntity("tally", tally, function(error, result, response) {
    if (error) {
      console.log("*Error saving tally " + error.toString());
    }
    else {
      callback(tally.id);
    }
  });
}
});}

stacktrace

1 个答案:

答案 0 :(得分:1)

Azure存储客户端库的位置已更改为https://github.com/Azure/azure-storage-node。您使用的样本来自旧位置和旧版本的库,这就是他们无法正常工作的原因。您将在新位置找到更新的样本和代码。

在较新版本中,必须为每个表实体指定Edm类型。这是因为类型存储在存储服务中,我们希望确保存储您想要的内容。每个表实体都是一个形式为{_:value,$:Edm.Type}的对象。

实体生成器是一种便利功能,可以更简单地构造表实体对象。我们以刚才提到的形式返回实体,使用这个便利功能不会以任何方式改变它。