0

我正在尝试制作两个功能。Save() 应该检查是否存在该用户的现有文档,如果存在则使用新文档更新他的保存,如果没有则使用用户的唯一 ID 作为文档唯一 ID 插入新文档。Load() 应该检查是否存在具有用户 ID 的现有保存并加载它。我对此完全陌生,这是我得到的错误

未捕获的错误:不允许。不受信任的代码只能按 ID 更新文档。[403]

我知道它的发生是因为更新和插入的工作方式。但我想将用户的唯一 ID 用于文档,因为它看起来很简单。

function Save() {
        if (Meteor.userId()) {
            player = Session.get("Player");
            var save = {    
                    id: Meteor.userId(),
                    data = "data"
                    };
            console.log(JSON.stringify(save));
                if (Saves.find({id: Meteor.userId()})){
                    Saves.update( {id: Meteor.userId()}, {save: save} )
                    console.log("Updated saves")
                }
                else {
                    Saves.insert(save)
                }

            console.log("Saved");
            }
}

function Load(){
        if (Meteor.userId()){
            if (Saves.find(Meteor.userId())){
                console.log(JSON.stringify(Saves.find(Meteor.userId()).save.player));
                player = Saves.find(Meteor.userId()).save.player;
                data= Saves.find(Meteor.userId()).save.data

            }
        }
}
4

1 回答 1

1

对象/文档 -id字段被称为_id看这里!

当您尝试在客户端更新现有对象/文档时会发生错误。您始终需要传入对象_id以从客户端代码更新对象/文档。请注意,您总是尝试传递一个idnot an _id

所以试试这样:

function Save() {
    if (Meteor.userId()) {
        player = Session.get("Player");
        var save = {    
                _id: Meteor.userId(),
                data = "data"
                };
        console.log(JSON.stringify(save));
            if (Saves.find({_id: Meteor.userId()})){
                Saves.update( {_id: Meteor.userId()}, {save: save} )
                console.log("Updated saves")
            }
            else {
                Saves.insert(save)
            }

        console.log("Saved");
        }
}

另请注意,您的Load()函数可以工作,因为Collection.find()使用您作为_id文档传递的字符串。

希望有帮助!

于 2013-06-27T17:17:29.647 回答