IronRouter dataNotFound在博客文章中

时间:2016-09-09 09:55:07

标签: meteor iron-router

如果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页面,只发布没有数据。

你有什么想法吗?

谢谢!

1 个答案:

答案 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集合的订阅,以避免不必要地转到未找到的网页。