具有复杂字段类型的Azure Mobile服务器更新脚本

时间:2015-01-27 19:17:11

标签: node.js azure azure-mobile-services

我有一个复杂的数据类型“AzureTemplate”,其中包含子项“AzureField”的列表。我根据this article实现了我在服务器端的读取和插入。效果很好。

还需要更新,我将插件复制/粘贴到更新中,因此它执行相同的操作,但使用更新。所以我的更新看起来像这样:

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();
        }
    }
});
}

打印子“字段”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(),但是从未出现过,所以它没有进入那里。此外,当我直接从客户端更新单个子“字段”时,它工作正常。所以AzureField.update正在运行。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

var fieldsTable = tables.getTable('AzureFields');

...我的表名是 AzureField ,而不是 AzureFields 。上面的代码有效,希望对某人有帮助。

我之前错误地命名了一个表,并且得到了一个有关"表不存在"的有意义的错误。不确定为什么这种情况下的错误完全不相关。