Meteor FlowRouter:替换受限路由的历史路径

Meteor FlowRouter: replace path in history for restricted route

我在 Meteor 应用程序中使用 FlowRouter。在一种情况下,资源直到某个 date/time 才可用,因此我们重定向到另一条路线。无论如何用重定向路径替换到受限资源的路由,这样受限资源路由就不会出现在浏览器历史记录中。这样做将使历史记录(使用后退、前进)对用户体验更加友好。

我可以在 FlowRouter 的 triggersEnter 中实现这一点,方法是使用类似以下内容的 FlowRouter 外部:

if(restricted) {
  return window.location.replace(`/waitingroom/${resourceId}/user/${Meteor.userId()}`);
}

...但这会导致页面重新加载,这是不受欢迎的。

有什么想法吗?

传递给 triggersEnter 的函数具有名为 redirect 的第二个参数,您可以使用它重定向到其他页面而无需重新加载页面并获得干净的历史记录:

FR.route('/restricted-route', {
  name: 'RestrictedRoute',
  triggersEnter: [function(context, redirect) {
    redirect('/replace-route');
  }]
});

FR.route('/replace-route', {
  name: 'ReplaceRoute',
  action() {
    // ...
  }
});

已更新

我不确定为什么需要同步。不管怎样,FlowRouter 在后台使用 Page.js 进行导航,如果你不能使用 redirect 那么这应该可以工作:

FR.route('/restricted-route', {
  name: 'RestrictedRoute',
  triggersEnter: [function(context, redirect) {
    Meteor.setTimeout(() => {
      FlowRouter._page.replace('/replace-route');
    }, 1000);
  }]
});

注意:这不是 public API,因此您应该在生产前仔细测试它。