我正在尝试制作两个功能。 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
}
}
}
答案 0 :(得分:1)
对象/文档id
- 字段称为_id
。
See here!
当您尝试更新客户端上的现有对象/文档时,会发生此错误。
您始终需要传入对象_id
以从客户端代码更新对象/文档。
请注意,您始终尝试传递id
而不是_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
。
希望有所帮助!