路线调度从未呈现。你忘了在onBeforeAction中调用this.next()吗?

时间:2016-02-01 07:44:56

标签: javascript meteor iron-router

我现在正在Meteor中执行注销功能,我注意到了一些奇怪的事情。当我登录登录页面或登出并重定向到登录页面时,我的Google控制台出现错误:

路线调度从未呈现过。您是否忘记在onBeforeAction中调用this.next()?

这是我的代码:

router.js

var routerExcepts = [
  "login",
  "register"
];


Router.onBeforeAction(function() {
  if (Router.current().route.getName() != "adminlogin.:_id") {
    if (!Meteor.userId()) {
      return this.redirect("/login");
    } else {
      this.next();
    }
  }
}, {
  except: routerExcepts
});

home.html:

<template name="home">
  <div class="container">
     <a href="#" id="item-logout" class="btn btn-default btn-lg btn-block">Logout</a>
  </div>
</template>

home.js:

Template.home.events({
  "click #item-logout": function() {
    Meteor.logout();
  }
});

有人知道我的代码会发生什么变化吗?我知道这与其他问题有点重复,我尝试了解决这些问题的解决方案,但它并没有解决我的问题。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您不需要将此设置为返回值,我认为这可能会导致您的问题,替换

return this.redirect("/login");

this.redirect("/login");

如果您仍然收到错误,请尝试将'this.redirect'替换为'Router.go'(如果我没记错的话,无论如何都要记得这个.redirect代理),如下所示:

Router.go("/login");

你也可以删除else以确保始终触发this.next():

Router.onBeforeAction(function() {
  if (Router.current().route.getName() != "adminlogin.:_id") {
    if (!Meteor.userId())
      Router.go("/login");
    this.next();
  }
}

答案 1 :(得分:0)

尝试将this.next()置于条件之外:

Router.onBeforeAction(function() {
  if (Router.current().route.getName() != "adminlogin.:_id") {
    if (!Meteor.userId()) {
      return this.redirect("/login");
    }
  }
  this.next();
}