流星更新 - 集合即使报告它也不会更新

时间:2016-03-02 09:44:54

标签: mongodb meteor

我试图更新集合但我出于某种原因,即使它跟踪成功,当我在我的控制台中查看该集合时,它似乎没有更新。

这就是我正在做的事情:

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]"。

有人有什么想法吗?

1 个答案:

答案 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")
);