如果一个对象不存在,重定向到Meteor中的不同路由

问题描述:

我有一个路径postDetail,路径/posts/:postId使用流路由器。如果一个对象不存在,重定向到Meteor中的不同路由

我想检查帖子是否确实存在。如果帖子不存在,我想要显示postList路线。

我该怎么做?我想我可以用triggersEnter;但是,数据是在模板中订阅的,因此我可能无法在路由器中使用triggersEnter

一个简单的方法是将填充从模板辅助变量doesExists模板,只需使用

{{#if doesExists}} 
    [...] 
{{else}} 
    {{> postList}} 
{{/if}} 

,但我不认为这是这样做,因为我必须做一个非常聪明的方式这在很多不同的模板中,我不能用这种方法将用户重定向到postList路由。

+2

我会重新考虑这一UX模式。如果用户期望看到给定帖子的详细信息,而不是看到帖子列表(或者更糟糕的是正在重定向到帖子列表),而没有任何迹象表明帖子不可用,那么我会认为这是可用性问题。 – MasterAM

+0

你说得对。我可以使用我在我的问题中写的模式;然而,当用户点击帖子时,他会看到不同的布局和特定于该帖子的子导航,所以当帖子不存在时,子导航变得非常奇怪。理想情况下,我可以使用我在流路由器中配置的'notFound' – Jamgreen

如果你有模板级别订阅,如:

Template.YOUR_TEMPLATE_HERE.onCreated(function() { 
    let self = this; 
    self.autorun(function() { 
    self.subscribe('posts'); 
    }) 
}); 

然后你就可以用triggersEnter重定向,像这样:

triggersEnter: [function(context, redirect) { 
    if (Posts.find({_id:context.params.id}).count() < 1) 
    redirect('/postslist'); 
}],