具有复杂字段类型的 Azure 移动服务器更新脚本
Azure Mobile server update script w/ complex field type
我有一个复杂的数据类型 "AzureTemplate",其中包含 children "AzureField" 的列表。我已经根据 this article 在服务器端实现了读取和插入。效果很好。
我也需要更新,所以我 copy/pasted 插入到更新中,所以它做同样的事情,但使用更新代替。所以我的更新看起来像这样:
function update(item, user, request) {
// remove complex child object, make copy first
var fields = item.fields;
if (fields) {
delete item.fields;
}
request.execute({
success: function () {
var templateId = item.id; // "foreign key"
var fieldsTable = tables.getTable('AzureFields');
if (fields) {
// update the child fields
var updateNextField = function (index) {
if (index >= fields.length) {
// done updating fields, respond to client
request.respond();
} else {
var field = fields[index];
field.templateId = templateId;
// *** THE ID LOGGED HERE LOOKS FINE ***
console.log("updating field w/ id ", field.id);
fieldsTable.update(field, {
success: function () {
updateNextField(index + 1);
}
});
}
};
// kick off the loop saving each field
updateNextField(0);
} else {
// no fields. no need to do anything else
request.respond();
}
}
});
}
打印 child "field" ID 的日志显示了一个有效的字段 ID(我在读取它们时将它们保存在客户端)。但我收到一条错误消息:
Error in script '/table/AzureTemplate.update.js'. Error: Invalid id value specified. AzureTemplate/update Tue Jan 27 2015, 10:11:31 AM
我在 AzureField.update 的顶部放了一个 console.log(),但是它从来没有出现过,所以它没有进入那里。此外,当我直接从客户端更新单个 child "Field" 时,它工作正常。所以 AzureField.update 正在工作。有任何想法吗?
var fieldsTable = tables.getTable('AzureFields');
...我的 table 名字是 AzureField,而不是 AzureFields。上面的代码有效,希望对某人有所帮助。
我之前给 table 取了一个错误的名字,并且得到了一个关于 "table not existing" 的有意义的错误。不确定为什么这种情况下的错误完全无关。
我有一个复杂的数据类型 "AzureTemplate",其中包含 children "AzureField" 的列表。我已经根据 this article 在服务器端实现了读取和插入。效果很好。
我也需要更新,所以我 copy/pasted 插入到更新中,所以它做同样的事情,但使用更新代替。所以我的更新看起来像这样:
function update(item, user, request) {
// remove complex child object, make copy first
var fields = item.fields;
if (fields) {
delete item.fields;
}
request.execute({
success: function () {
var templateId = item.id; // "foreign key"
var fieldsTable = tables.getTable('AzureFields');
if (fields) {
// update the child fields
var updateNextField = function (index) {
if (index >= fields.length) {
// done updating fields, respond to client
request.respond();
} else {
var field = fields[index];
field.templateId = templateId;
// *** THE ID LOGGED HERE LOOKS FINE ***
console.log("updating field w/ id ", field.id);
fieldsTable.update(field, {
success: function () {
updateNextField(index + 1);
}
});
}
};
// kick off the loop saving each field
updateNextField(0);
} else {
// no fields. no need to do anything else
request.respond();
}
}
});
}
打印 child "field" ID 的日志显示了一个有效的字段 ID(我在读取它们时将它们保存在客户端)。但我收到一条错误消息:
Error in script '/table/AzureTemplate.update.js'. Error: Invalid id value specified. AzureTemplate/update Tue Jan 27 2015, 10:11:31 AM
我在 AzureField.update 的顶部放了一个 console.log(),但是它从来没有出现过,所以它没有进入那里。此外,当我直接从客户端更新单个 child "Field" 时,它工作正常。所以 AzureField.update 正在工作。有任何想法吗?
var fieldsTable = tables.getTable('AzureFields');
...我的 table 名字是 AzureField,而不是 AzureFields。上面的代码有效,希望对某人有所帮助。
我之前给 table 取了一个错误的名字,并且得到了一个关于 "table not existing" 的有意义的错误。不确定为什么这种情况下的错误完全无关。