【问题标题】:Iron-router and Meteor.user: route called two timesIron-router 和 Meteor.user:路由被调用两次
【发布时间】:2016-02-11 10:37:57
【问题描述】:

我正在使用 Iron 路由器的 onBeforeAction 方法来检查用户是否登录了除注册和登录路由之外的所有路由:

Router.onBeforeAction(function() {
    if (!Meteor.user()) {
        this.render('login');
    }
    else {
        this.next();
    }
}, {except: ['login', 'register']});

(仅供参考,登录过程是在登录模板/js 中使用this code 进行的)

这很好用,只是当我登录时,登录模板会在被实际模板替换之前快速显示。

当我检查发生了什么时,我发现Meteor.user() 在 Iron 路由器之前还没有准备好。结果,登录页面显示为用户未登录。然后(因为Meteor.user() 是响应式的),当Meteor.user() 准备好时,路由将再次运行,显示正确的模板。

我怎样才能使上面的这个小代码示例正常工作?(意思是:没有显示登录模板,因为Meteor.user() 还没有准备好)

我还在 Stack Overflow 上发现我可以使用 fast-render package,但我不愿意破解渲染过程。 onRun() 方法也不能解决这个问题。 我还在某处读到过我可以使用Router.configure 的waitOn 选项的文章,但我唯一的例子是我还没有订阅(我正在使用不安全的自动发布包进行原型设计)。

【问题讨论】:

  • 这不会有太大帮助,但我在使用 IR 时遇到了同样的问题,并且听说流路由器不会随机重新渲染。基本上,我已经同意切换到 Flow Router。
  • @Ruby_Pry 嗯,这是一个激进的方法!但我确信仍有希望。尤其是waitOn 附近的某个地方。请有人,向我们展示你的光芒! :)
  • 顺便说一句,我什至尝试过使用官方文档的this.isReady() 方式,但它不起作用(看起来它正在等待订阅)。 @Ruby_Pry:不过我找到了一种方法。我现在把它贴在这里。
  • 并不激烈,因为它是未来流星社区使用的主要路由器。此外,它还有 Iron Router 目前缺乏的持续支持。
  • @Ruby_Pry 谢谢,我不知道。我会尝试下一个项目:)

标签: javascript meteor login iron-router


【解决方案1】:

我不认为这是最好的解决方案,但这个技巧很有效:

Router.onBeforeAction(function() {
   if (Meteor.user() !== undefined) {
        if (!Meteor.user()) {
            this.render('login');
        }
        else {
            this.next();
        }
    }
    else {
        this.pause();
    }
}, {except: ['login', 'register']});

此代码示例有效,因为Meteor.user() 在准备好之前是未定义,如果准备好但没有用户登录,则它是null。

对于我的项目,我什至用加载屏幕替换了this.pause():

Router.onBeforeAction(function() {
   if (Meteor.user() !== undefined) {
        if (!Meteor.user()) {
            this.render('login');
        }
        else {
            this.next();
        }
    }
    else {
        this.render('loading');
    }
}, {except: ['login', 'register']});

我希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2013-11-27
    相关资源
    最近更新 更多