Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor LogginIn()在不需要时显示加载_Javascript_Meteor_Url Routing - Fatal编程技术网

Javascript Meteor LogginIn()在不需要时显示加载

Javascript Meteor LogginIn()在不需要时显示加载,javascript,meteor,url-routing,Javascript,Meteor,Url Routing,我正在阅读《发现流星》一书,在其中一章中,作者教我使用meteor.logginIn()方法 目标很简单,新帖子有一个提交页面,如果没有用户登录,它应该显示拒绝访问模板,否则它应该显示帖子提交模板。但如果用户登录或处于等待状态,则应显示加载模板。我按照教程的要求去做,代码看起来和书中的完全一样。但是,当用户登录时,它会正确地显示提交页面;当用户注销时,它会显示拒绝访问页面,但会显示加载模板;当我登录时,它会显示加载模板,然后还会显示提交页面。唯一的问题是,虽然它应该显示拒绝访问,但它显示的是加载

我正在阅读《发现流星》一书,在其中一章中,作者教我使用
meteor.logginIn()
方法

目标很简单,新帖子有一个提交页面,如果没有用户登录,它应该显示拒绝访问模板,否则它应该显示帖子提交模板。但如果用户登录或处于等待状态,则应显示加载模板。我按照教程的要求去做,代码看起来和书中的完全一样。但是,当用户登录时,它会正确地显示提交页面;当用户注销时,它会显示拒绝访问页面,但会显示加载模板;当我登录时,它会显示加载模板,然后还会显示提交页面。唯一的问题是,虽然它应该显示拒绝访问,但它显示的是加载模板

这是路由代码

Router.route('/submit', {name: 'postSubmit'});

var requireLogin = function(){
    if(!Meteor.user()){
        if(Meteor.logginIn()){
            this.render(this.loadingTemplate);
        }else{
            this.render('accessDenied');
        }
    }else {
        this.next();
    }
}
Router.onBeforeAction('dataNotFound', {only:'postPage'});
Router.onBeforeAction(requireLogin, {only:'postSubmit'});

呃,这段代码需要一些帮助。就像这个例子一样,我们将分离关注点并在不同的钩子中调用它们

首先,请记住,每次调用
onBeforeAction
时,它都会将该函数添加到。虽然不依赖于顺序始终是一个很好的实践,但是记住这一点很好

var userLoggingIn = function() {
   if(Meteor.loggingIn()) {
      this.render(this.loadingTemplate); 
   } else {
      this.next(); // Done logging in? You may pass.
   }
}

var requireLogin = function() {
   if(!Meteor.user()) {
      this.render('accessDenied');
   } else {
     this.next(); // User is logged in. I'll allow it.
   }
}

// finally, use it.
Router.onBeforeAction([userLoggingIn, requireLogin], {only: 'postSubmit'});
Router.onBeforeAction('loading'); // built-in hook, just like dataNotFound. use in Routes with subscriptions.
Router.onBeforeAction('dataNotFound', {only:'postPage'});

这样不是更好,更容易管理吗?我不确定它将执行哪一个命令,因为我正在旅行,只是在机场把它打印出来。。但是如果钩子没有相应的行为,您可以尝试交换钩子顺序。

Meteor.loggin()
。。你确定那不是打字错误吗?它应该是Meteor.logging()。是的,我的错。。这是一个看起来很容易处理的问题。但造成错误的是打字错误。对不起,再次感谢你,我现在学到了一些新东西。