我有以下路线:
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');
}
}
// ...
但它没有用。
有什么想法吗?
答案 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');
}
}