2016-09-09 53 views
0

如果blog/xyz不起作用,我想显示404页面。所以我加dataNotFound我routes.js,但我没有任何结果:IronRouter dataNot在博客文章

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

谢谢!完美的工作! –