Meteor - Iron路由器:重定向无效参数

时间:2015-06-01 19:56:25

标签: meteor iron-router

我有以下路线:

Router.route('publication/:_id', {
    name: 'show_publication',
    controller: 'PublicationController',
    action: 'show',
    where: 'client',
    waitOn: function() {

        return [
            Meteor.subscribe("publication", new Mongo.ObjectID(this.params._id)),
            Meteor.subscribe("deal", new Mongo.ObjectID(this.params._id))
        ];
    }
});

以下控制器操作:

// ...
show: function() {

    var publication = Publications.findOne({
            _id: new Mongo.ObjectID(this.params._id)
        });


    if (publication) {
        this.render('Publication', {
            data: publication
        });

    //The hex string is valid but it's not a publication _id
    } else {
        Router.go('home');
    }

}
// ...

_id参数是一个十六进制字符串,我创建一个ObjectID来检索出版物。

当参数不是正确的十六进制字符串时,会出现问题。我在控制台中收到此错误:

Exception in callback of async function: Error: Invalid hexadecimal string for creating an ObjectID

因此,在调用waitOn函数之前,我想检查十六进制字符串是否有效,如果不是,则重定向到主页。我尝试使用onBeforeAction

// ...
onBeforeAction: function() {

    try {
        new Mongo.ObjectID(this.params._id);
    } catch (e) {
        Router.go('home');
    }
}
// ...

但它没有用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

onBeforeAction: function() {
      try {
        new Mongo.ObjectID(this.params._id);
      } catch (e) {
        Router.go('home');
      }
    }

代替" onBeforeAction:"将上述代码写入"数据:"回调,因为你的waitOn函数等待数据返回

data: function() {
      try {
        new Mongo.ObjectID(this.params._id);
      } catch (e) {
        Router.go('home');
      }
    }