我试图更新集合但我出于某种原因,即使它跟踪成功,当我在我的控制台中查看该集合时,它似乎没有更新。
这就是我正在做的事情:
1)从客户端的javascript函数调用更新函数。所有值都正确传递:
Meteor.call('minisiteUpdater',vLayout,vColour,vBG,vHFont,vBFont,vFontColour);
2)函数本身(在Meteor.methods中定义)如下。请注意,当我在控制台中记录所有内容时,所有值都会成功传递到函数中,并且我从会话var中获取的siteID也已正确设置。问题是控制台正在记录"成功",这告诉我更新已经有效,但是当我进入Therapistminisite.find()。fetch()之后进入控制台并查看所谓的更新收集项目,尚未更新。
minisiteUpdater: function(vLayout,vColour,vBG,vHFont,vBFont,vFontColour){
var updates = { $set: {
layout: vLayout,
colour: vColour,
backgroundimage: vBG,
headingfont: vHFont,
bodyfont: vBFont,
fontcolour: vFontColour
}};
var siteID = Session.get("currentSiteBuilderID");
Therapistminisite.update(siteID, updates, function (error) {
if (error){
console.log(error);
}
else{
console.log("success");
}
});
},
最后,就在我获得成功"登录到控制台,我还收到以下错误消息:"错误调用方法' minisiteUpdater':内部服务器错误[500]"。
有人有什么想法吗?
答案 0 :(得分:4)
如果这是服务器和客户端的方法定义,
您无法在服务器端调用Session.get,因此该方法在浏览器中调用时会成功,但在服务器上调用时会失败。如果您查看服务器控制台,您应该会看到服务器错误:Session is not defined
对应于浏览器控制台中的500错误。
尝试添加siteId作为方法参数,并删除从会话中获取它的行:
minisiteUpdater: function(vLayout,vColour,vBG,vHFont,vBFont,vFontColour, siteID){
var updates = { $set: {
layout: vLayout,
colour: vColour,
backgroundimage: vBG,
headingfont: vHFont,
bodyfont: vBFont,
fontcolour: vFontColour
}};
Therapistminisite.update(siteID, updates, function (error) {
if (error){
console.log(error);
}
else{
console.log("success");
}
});
},
(删除此行:var siteID = Session.get("currentSiteBuilderID");
)
然后在你从客户端调用它时传递Session.get("currentSiteBuilderID")
:
Meteor.call(
'minisiteUpdater',
vLayout,
vColour,
vBG,
vHFont,
vBFont,
vFontColour,
Session.get("currentSiteBuilderID")
);