如何在铁路由器中处理这种未找到的错误?

时间:2015-08-06 22:28:21

标签: meteor iron-router

例如,我有一个Posts集合,userId表示此帖子属于谁。

我有这样的路线:

Router.route('/:username/posts', {
    waitOn: function(){
        return Meteor.subscribe('posts', username);  // A
        // var user = Meteor.users.find({username: username}); //B
        // if(user) {
        //     return Meteor.subscribe('posts', user._id);
        // } else {
        //     return null; // ???
        // }
    }
});

并发布

Meteor.publish("posts", function(userId){       // C
    check(userId, String);
    return Posts.find({userId: userId});
});

Meteor.publish("posts", function(username){       // D
    check(username, String);
    if(user) {
         return Posts.find({userId: user._id});
    } else {
         return null; // ???
    }
});

我很困惑如何处理GET /notexistusername/posts ??

1 个答案:

答案 0 :(得分:0)

您可以全局或按路由为铁路由器配置 notFoundTemplate

全局:

Router.configure({
  layoutTemplate: 'layout',
  notFoundTemplate: 'notFound',
  loadingTemplate: 'loading'
});

在特定路线中(我也清理了路线代码):

Router.route('/:username/posts', {
  notFoundTemplate: 'notFound',
  data: function(){
    var userId = Meteor.users.find({ username: this.params.username })._id;
    return Posts.find({ userId: userId });
  }, 
  waitOn: function(){
    var userId = Meteor.users.find({ username: this.params.username })._id;
    return Meteor.subscribe('posts', userId);
  }
});

您的 notFound 模板通常是您的404页面。

您还可以将出版物简化为:

Meteor.publish("posts", function(username){
  check(username, String);
  return Posts.find({username: username});
});

因为如果没有匹配,find将返回一个空游标,这将告诉路由没有数据。