流星永远不会看到我的登录信息

时间:2014-10-25 21:16:43

标签: meteor

我想检测登录用户是否在集合中没有记录,然后使用一些默认值启动它们。所以我在isClient部分的开头使用它;

if (Meteor.isClient) {

  if(Meteor.user()){
    Meteor.subscribe('collection');
    var currentUserId = Meteor.userId();
    if (collection.find({"userID": currentUserId}).count() == 0)
    {       
      Meteor.call('initUser', currentUserId);
    }
  } else {
    console.log("You are not logged in");
  }
}

问题是它从来没有看到我登录。我是否需要从模板或其他东西中调用它?在我做的教程中,他们只是自己拥有它。

1 个答案:

答案 0 :(得分:1)

你的代码看起来不错,但它并不存在于被动计算中,这意味着它只会在代码开头运行一次,而不会再像常规顺序编程一样运行。

您需要使用Tracker.autorun这样的代码包围您的代码:

if (Meteor.isClient) {
  Tracker.autorun(function(){
    // Meteor.userId() is a reactive data source that will trigger invalidation
    // of the reactive computation whenever it is modified (on login/logout)
    var currentUserId = Meteor.userId();
    if(currentUserId){
      Meteor.subscribe('collection',function(){
        if (collection.find({
          userID: currentUserId
        }).count() === 0){       
          Meteor.call('initUser', currentUserId);
        }
      });
    } else {
      console.log("You are not logged in");
    }
  }
}

我已将其重构为仅使用Meteor.userId(),因为您在此段代码中未使用currentUser属性。