如果blog/xyz
不起作用,我想显示404页面。所以我在我的routes.js上添加了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'
});
如果我使用blog/ojhojeofje
测试错误的网址,我没有404页面,只发布没有数据。
你有什么想法吗?
谢谢!
答案 0 :(得分:1)
首先,您需要将dataNotFound
注册为插件而不是onBeforeAction
:
Router.plugin('dataNotFound', { only: ['blogPost'] });
其次,dataNotFound
插件通过检查您的路由data()
是否返回虚假值来工作。由于您要在data()
函数中加载多个数据对象,因此需要更改函数,以便在找不到帖子时返回错误的内容。例如,您可以这样做:
data: function () {
let post = Posts.findOne({
'slug': this.params.slug
});
if (!post) {
return false;
}
...
请注意,在运行Posts
之前,您还需要确保已准备好data
集合的订阅,以避免不必要地转到未找到的网页。