博客上的 IronRouter dataNotFound post
IronRouter dataNotFound on blog post
如果 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
测试错了 url,我没有 404 页面,只有 post 没有数据。
你有什么想法吗?
谢谢!
首先,您需要将dataNotFound
注册为插件而不是onBeforeAction
:
Router.plugin('dataNotFound', { only: ['blogPost'] });
其次,dataNotFound
插件通过检查您的路由 data()
return 是否为虚假值来工作。因为你想在你的 data()
函数中加载多个数据 object ,你需要改变你的函数,这样如果 post 没有找到它就会 return 一些虚假的东西。例如,您可以简单地这样做:
data: function () {
let post = Posts.findOne({
'slug': this.params.slug
});
if (!post) {
return false;
}
...
请注意,您还需要确保在 运行 data
之前您已准备好对 Posts
collection 的订阅,以避免进入不不必要地找到页面。
如果 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
测试错了 url,我没有 404 页面,只有 post 没有数据。
你有什么想法吗?
谢谢!
首先,您需要将dataNotFound
注册为插件而不是onBeforeAction
:
Router.plugin('dataNotFound', { only: ['blogPost'] });
其次,dataNotFound
插件通过检查您的路由 data()
return 是否为虚假值来工作。因为你想在你的 data()
函数中加载多个数据 object ,你需要改变你的函数,这样如果 post 没有找到它就会 return 一些虚假的东西。例如,您可以简单地这样做:
data: function () {
let post = Posts.findOne({
'slug': this.params.slug
});
if (!post) {
return false;
}
...
请注意,您还需要确保在 运行 data
之前您已准备好对 Posts
collection 的订阅,以避免进入不不必要地找到页面。