【问题标题】:IronRouter dataNotFound on blog postIronRouter dataNotFound on blog post
【发布时间】:2017-01-17 10:36:35
【问题描述】:

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

你有什么想法吗?

谢谢!

【问题讨论】:

    标签: meteor iron-router


    【解决方案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;
      }
      ...
    

    请注意,您还需要确保在运行 data 之前已准备好订阅 Posts 集合,以避免不必要地转到未找到的页面。

    【讨论】:

    • 谢谢!完美运行!
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    相关资源
    最近更新 更多