#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:
Наконец-то найдена ошибка:
Я публиковал дополнительные пользовательские данные, используя:
Meteor.publish('userData'...
но когда нет пользователя, эта публикация равна нулю, и мое ожидание никогда не заканчивается. Исправлено добавление:
this.ready();
перед возвратом null при публикации.