2015-04-23 1 views
2

У меня есть несколько путей, которые выглядят следующим образом в моем приложении, все под палитрой.путь панировки: извлекать данные для всего, что находится под дорогой

/class/:slug 
/class/:slug/student/:_id 
/class/:slug/teacher/:_id 

Однако это, как правило, приводит к избыточности, потому что приходится постоянно искать класс по слизняк, прежде чем запрашивая

this.route('Class.teacher', { 
    path: '/class/:slug/teacher/:_id', 
    waitOn: function() { 
    return Meteor.subscribe('teachers'); 
    }, 
    data: function() { 
    var classId = Classes.findOne({ slug: this.params.slug })._id; 
    if(!classId) { 
     throw new Meteor.Error(404, 'That class does not exist'); 
    } 

    return Teacher.findOne(
     { _id: this.params._id, classIds: classId } 
    ); 
    } 
}) 

Проблема количество избыточности это, как представляется, индуцируют, как я начала большинство моих маршрутов с поиском класса.

Есть ли способ выполнить какие-то манипуляции на маршруте /class/:slug? Я подумал примерно так:

Router.route('/class/:slug/*', { 
    waitOn: function() { 
    return Meteor.subscribe('classes', this.params.slug); 
    }, 
    onBeforeAction: function() { 
    var class = Classes.findOne(this.params.slug); 
    if(!class) { 
     throw new Meteor.Error(404, "Class not found"); 
     this.stop(); 
    } 
    this.next(); 
    } 
}); 

Однако это не работает. Каким образом можно правильно обрабатывать пути для сухарей?

ответ

0

Вы могли бы, вероятно, использовать

Router.onBeforeAction(function(req, res, next){ 
    // find class here 
    // req.params.slug Not sure about this 
    next() 
}, { only: ['class'] }); 

Просто идея, хотя.