meteor - Iron Router onBeforeAction 未被调用

标签 meteor iron-router

我设置了一个 /user 路由,如果当前用户未登录,它应该呈现 login 模板。整个路由器有一个 waitOn 等待 currentUser 订阅完成。问题是,当我转到 /user 时,它只是呈现 dataNotFound 模板。

以下是与这种情况相关的代码片段。我一直小心翼翼地按照它们在我的 lib/router.js 文件中定义的顺序向您展示它们。

Router.plugin('dataNotFound', {notFoundTemplate: 'notFound'});

Router.onBeforeAction(function () {
    console.log(Meteor.userId())
    if (!Meteor.userId()) this.render('login');
    else this.next();
}, { only: ['user'] });

Router.configure({
    waitOn: function () { return Meteor.subscribe('currentUser'); }
});

Router.route('/user', {
    name: 'user',
    template: 'userView',
    data: function () { return Meteor.user(); }
});

上面的 console.log 甚至从未触发过。在我看来,由于它应该是一个 react 函数,即使最初呈现 dataNotFound ,那么不久之后 onBeforeAction 应该被触发并呈现 登录模板,对吧?

最佳答案

很奇怪的是你的控制台日志甚至没有触发。我有一些想法,但首先想解决你的最后一个问题。

当数据函数在路由上触发时,将触发 dataNotFound 插件。这意味着它完全绕过了你的 onBeforeAction 钩子(Hook),而不是说它没有到达那里。

我能想到的一件值得尝试的事情是将“用户”路由操作包装在 if ( this.ready() ) 语句中:

编辑:

Router.route('用户', { //你的其他东西 Action :函数(){ 如果这个.ready() { this.render(); },

我建议这只是因为您正在使用 waitOn 语句,但如果您的 route 某处没有 this.ready() ,我不能 100% 确定它是如何工作的,因为这就是 (再次,根据我对文档的阅读,没有摆弄它)告诉路由器在执行之前要等待什么。可能现在根本就没有等待。

关于meteor - Iron Router onBeforeAction 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26833529/

相关文章:

javascript - 如何在 Meteor 中只允许插入和更新某些文档字段?

javascript - 如何使用 Meteor 和 Iron Router 通过模板中的路由名称检查路由

javascript - 使用请求模块下载文件并将结果传递给meteor.js 中的响应

iframe - 如何在 Meteor 的特定页面上禁用 HTTPS/SSL?

meteor - Iron 路由器语法 : onAfterAction

meteor - 错误 : Cannot find module 'paypal-ipn'

cordova - 我如何使用 Meteor 为移动应用程序和 Web 浏览器构建不同的 UI

meteor 空格键 : {{#if}} inside {{#each}} produces unexpected results

javascript - 在呈现的回调中访问数据上下文

javascript - Meteor 应用程序中的 Future.js 错误