Ошибка на маршруте с параметром

#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 при публикации.