带参数的路由出错

时间:2014-06-24 14:11:40

标签: meteor iron-router

我想要一个基于名称的登录,因此用户名显示在登录页面上。

我的路由器:

Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function(){ 
    return [Meteor.subscribe('userData')];
}
});

Router.map(function(){

this.route('publichome',{path: '/'});
this.route('register',{path: '/register'});
this.route('home',{
    path: '/:_name',
    data: function(){ 
        return {'name':this.params._name};
    }
});
this.route('login',{
    path: '/:_name/login',
    data: function(){
        Session.set('_name', this.params._name);
        return {'name':this.params._name};
    }
});
});

var requireLogin = function(pause){
console.log("Pedimos login");
var routeName = this.route.name;
if(!Meteor.userId()){
    this.redirect('/' + this.params._name + '/login');
    pause();
}
};

Router.onBeforeAction(requireLogin, {except: ['login','register','publichome']});

路由有效,它显示登录页面,但永远不会返回数据。如果我登录并尝试相同的路线,它就可以工作。

为什么?

1 个答案:

答案 0 :(得分:0)

终于找到了错误:

我使用以下方式发布其他用户数据:

Meteor.publish('userData'...

但是当没有用户发布时为null并且我的WaitOn永远不会结束。修正了它添加:

this.ready();

在发布时返回null之前。