Javascript 如果某个对象没有';不存在

Javascript 如果某个对象没有';不存在,javascript,node.js,meteor,flow-router,Javascript,Node.js,Meteor,Flow Router,我有一个路径postdail,路径/posts/:postId使用Flow Router 我想检查一下这个帖子是否真的存在。如果帖子不存在,我想显示postList路由 我该怎么做?我想我可以使用触发器;但是,数据是在模板中订阅的,因此我可能无法在路由器中使用triggersEnter 一种简单的方法是使用模板帮助器中的变量doesExists填充模板,然后使用 {{#if doesExists}} [...] {{else}} {{> postList}} {{/if}} 但我

我有一个路径
postdail
,路径
/posts/:postId
使用Flow Router

我想检查一下这个帖子是否真的存在。如果帖子不存在,我想显示
postList
路由

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

一种简单的方法是使用模板帮助器中的变量
doesExists
填充模板,然后使用

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

但我不认为这是一种非常聪明的方法,因为我必须在许多不同的模板中执行此操作,并且我无法使用此方法将用户重定向到postList路由。

如果您有模板级订阅,如:

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');
}],
triggersEnter:[函数(上下文,重定向){
if(Posts.find({u id:context.params.id}).count()<1)
重定向('/postslist');
}],

如果您有模板级订阅,如:

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');
}],
triggersEnter:[函数(上下文,重定向){
if(Posts.find({u id:context.params.id}).count()<1)
重定向('/postslist');
}],

我会重新考虑这种用户体验模式。如果一个用户希望看到一个给定的帖子的细节,而不是看到一个帖子列表(或者更糟的是,它被重定向到它),而没有任何帖子不可用的指示,那么我会认为这是一个可用性问题。你是对的。我可能会使用我在问题中所写的模式;但是,当用户单击一篇文章时,他会看到一个不同的布局,其中包含一个特定于该文章的子导航,因此当该文章不存在时,子导航变得非常奇怪。理想情况下,我可以使用Flow RouterI中配置的
notFound
,我会重新考虑这个UX模式。如果一个用户希望看到一个给定的帖子的细节,而不是看到一个帖子列表(或者更糟的是,它被重定向到它),而没有任何帖子不可用的指示,那么我会认为这是一个可用性问题。你是对的。我可能会使用我在问题中所写的模式;但是,当用户单击一篇文章时,他会看到一个不同的布局,其中包含一个特定于该文章的子导航,因此当该文章不存在时,子导航变得非常奇怪。理想情况下,我可以使用Flow Router中配置的
notFound