在调用insertEntity()
时,这更像是寻求帮助的帮助。
我在Azure上使用Nodejs并在摩纳哥进行编辑,并且我已经在NPM上安装了最新版本的azure存储。
我遇到的例外是:(底部的完整堆栈跟踪)
Unaught exception:错误:函数entityOperation的参数entityDescriptor.PartitionKey应该是ArgumentValidator的对象._.extend.object
我基本上将我的对象保存,并创建了2个新属性:PartitionKey
和RowKey
。我给他们字符串值。我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);
}
});
}
});}
答案 0 :(得分:1)
Azure存储客户端库的位置已更改为https://github.com/Azure/azure-storage-node。您使用的样本来自旧位置和旧版本的库,这就是他们无法正常工作的原因。您将在新位置找到更新的样本和代码。
在较新版本中,必须为每个表实体指定Edm类型。这是因为类型存储在存储服务中,我们希望确保存储您想要的内容。每个表实体都是一个形式为{_:value,$:Edm.Type}的对象。
实体生成器是一种便利功能,可以更简单地构造表实体对象。我们以刚才提到的形式返回实体,使用这个便利功能不会以任何方式改变它。