0

現在、ユーザーが他のページをクリックしたときに、userId、Meteor.Router.page()、およびタイムスタンプを保存することにより、流星アプリでユーザー ページ ビューを記録しようとしています。

//userlog.js
Meteor.methods({
  createLog: function(page){
    var timeStamp = Meteor.user().lastActionTimestamp;
    //Set variable to store validation if user is logging in
    var hasLoggedIn = false;
    //Checks if lastActionTimestamp of user is more than an hour ago
    if(moment(new Date().getTime()).diff(moment(timeStamp), 'hours') >= 1){
      hasLoggedIn = true;
    }
      console.log("this ran");

    var log = {
      submitted: new Date().getTime(),
      userId: Meteor.userId(),
      page: page,
      login: hasLoggedIn
    }

    var logId = Userlogs.insert(log);

    Meteor.users.update(Meteor.userId(), {$set: {lastActionTimestamp: log.submitted}});
    return logId;
  }
});

//router.js This method runs on a filter on every page
'checkLoginStatus': function(page) {
    if(Meteor.userId()){
      //Logs the page that the user has switched to
      Meteor.call('createLog', page);
      return page;
    }else if(Meteor.loggingIn()) {
      return 'loading';
    }else {
      return 'loginPage';
    }
  }

ただし、これは機能せず、ユーザー ログが再帰的に作成されます。これは、ルーター フィルター メソッドで Collection.find を実行したためだと思います。この問題の回避策はありますか?

4

1 に答える 1