我现在正在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();
}
});
有人知道我的代码会发生什么变化吗?我知道这与其他问题有点重复,我尝试了解决这些问题的解决方案,但它并没有解决我的问题。
提前致谢。
答案 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();
}