Meteor路由器在开发模式下工作,但不在生产模式下

Meteor router working in dev mode but not in production mode

本文关键字:模式 路由器 Meteor 工作 开发      更新时间:2023-09-26

我试图保护一个管理页面,所以我为它创建了一个角色。我使用iron:router作为路由,在生产模式下我遇到了一个问题:每次我在浏览器中键入url/admin时,我都会进入/user(这是登录页面)。我在开发模式下没有这个问题!我真的不明白为什么

这是代码:

var middleware;
middleware = {
  isAdmin: function() {
    var user;
    user = Meteor.user();
    if (!Roles.userIsInRole(user, ['admin'])) {
      this.redirect('user');
      return;
    }
    return this.next();
  }
};

对于路由器:(在中

Router.map(function() {
  this.route('user', {
    path: '/user'
  });
  return this.route('admin', {
    path: '/admin',
    before: [middleware.isAdmin]
  });
});

我以前遇到过这个问题。问题是Meteor识别您是登录用户的延迟。

在应用程序中导航时,Meteor.user()保持设置状态,因此您可以到达您的路线。当输入URL时,您会执行一次完整的页面刷新,以便在Meteor完成登录之前调用路由挂钩。

因此,user = Meteor.user();会将user设置为null,您将被重定向到用户页面。

您可以使用Meteor.loggingIn()来检查登录过程是否仍在进行中。Iron Router的waitOn钩子可以用于此(或者在大多数情况下,只设置一个定时延迟可能就可以了)。

所以实际上我只是使用了快速渲染,它自动解决了我的问题。希望它能帮助到别人!