2016-09-09 3 views
0

Я хотел бы показать 404 страницы, если blog/xyz не работает. Так что я добавить dataNotFound на моем routes.js, но я не имею никакого результата:IronRouter dataNotFound на сообщение в блоге

Router.route('/blog/:slug', { 
    name: 'blogPost', 
    parent: 'blog', 
    itemName: function() { 
    return this.data().post.title; 
    }, 
    data: function() { 

    let post = Posts.findOne({ 
     'slug': this.params.slug 
    }); 

    return { 
     post, 
     profil 
    }; 

    } 
}); 

Router.onBeforeAction('dataNotFound', { 
    only: 'blogPost' 
}); 

Если я тест неправильный URL с blog/ojhojeofje, я не 404 страниц, просто опубликовать без данных.

У вас есть идея?

Спасибо!

ответ

1

Прежде всего, вам нужно зарегистрироваться dataNotFound в качестве плагина, а не в onBeforeAction:

Router.plugin('dataNotFound', { only: ['blogPost'] }); 

dataNotFound Во-вторых, плагин работает, проверяя, если ваш маршрут data() возвращает falsy значение. Поскольку вы хотите загрузить несколько объектов данных в свою data() функцию, вам нужно изменить свою функцию, чтобы она возвращала что-то ложное, если сообщение не найдено. Например, вы можете просто сделать это:

data: function() { 
    let post = Posts.findOne({ 
    'slug': this.params.slug 
    }); 
    if (!post) { 
    return false; 
    } 
    ... 

Обратите внимание, что вы также должны убедиться, что ваша подписка на Posts коллекцию готова перед запуском data, чтобы избежать идти к не нашел страницу без необходимости.

+0

Спасибо! Работайте отлично! –