博客上的 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 的订阅,以避免进入不不必要地找到页面。