【问题标题】:Meteor Iron Router doesn't call onBeforeAction if data returns null/undefined如果数据返回 null/undefined,Meteor Iron Router 不会调用 onBeforeAction
【发布时间】:2015-09-21 12:07:34
【问题描述】:

我正在使用带有 Iron-router 的 Meteor,如果他没有登录,我会尝试将用户重定向回登录页面。但在某些路由上,不会调用 onBeforeAction。我发现这与路由上的数据函数返回的数据有关。 如果数据返回 null/undefined,则不会调用 onBeforeAction,它会显示没有数据的布局。 如果数据返回,即一个空对象,它正在调用 onBeforeAction 并重定向到登录页面。

1) 这是正确的行为还是我的路由定义有问题?

2) 是否有可能在页面渲染之前调用 onBeforeAction 函数?因为它总是在短时间内显示布局/视图,这不是很好。

所以,我有这条路线:

    this.route('dashboardPortfolio', {
        path: ['/dashboard/portfolio'],
        layoutTemplate: 'dashboardLayout',
        yieldTemplates: {
            'header': {to: 'header'},
            'dashboardHeader': {to: 'dashboardHeader'},
            'footerMain' : {to: 'footer'}
        },
        notFoundTemplate: 'notFound',
        loadingTemplate: 'dashboardLoading',
        waitOn: function() {
            return Meteor.subscribe("portfolio-edit");
        },
        data: function() {
            var portfolio = Portfolio.findOne({user: Meteor.userId()});
            if(portfolio) return portfolio;
            else return {};
            // return Portfolio.findOne({user: Meteor.userId()});
        }
    });

还有我的 onBeforeAction:

var OnBeforeActions;

OnBeforeActions = {
    loginRequired: function(route, asd, pause) {
        if (!Meteor.userId()) {
            this.layout('login');
            this.render('login');
        } else {
            this.next();
        }
    }
};

Router.onBeforeAction(OnBeforeActions.loginRequired, {
    except: ['register', 'login', 'about', 'portfolio']
});

【问题讨论】:

    标签: javascript redirect meteor iron-router


    【解决方案1】:

    尝试在下一行将“except”替换为“only”:

    except: ['register', 'login', 'about', 'portfolio']
    

    祝你好运!

    【讨论】:

    • 这意味着您必须先登录才能打开登录/注册页面。黑名单 -> 白名单样式。
    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多