我想要一个基于名称的登录,因此用户名显示在登录页面上。
我的路由器:
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']});
路由有效,它显示登录页面,但永远不会返回数据。如果我登录并尝试相同的路线,它就可以工作。
为什么?
答案 0 :(得分:0)
终于找到了错误:
我使用以下方式发布其他用户数据:
Meteor.publish('userData'...
但是当没有用户发布时为null并且我的WaitOn永远不会结束。修正了它添加:
this.ready();
在发布时返回null之前。