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

Redirect Meteor FlowRouter:替换限制路由的历史路径,redirect,meteor,browser-history,flow-router,Redirect,Meteor,Browser History,Flow Router,我在Meteor应用程序中使用FlowRouter。在一种情况下,资源直到某个日期/时间才可用,因此我们重定向到另一个路由。是否仍要使用重定向路径替换到受限资源的路由,以便受限资源路由不会出现在浏览器历史记录中。这样做将使历史(使用后退、前进)更加友好 我可以在FlowRouter的triggersEnter中为路由实现这一点,方法是在FlowRouter的外部使用类似于: if(restricted) { return window.location.replace(`/waitingro

我在Meteor应用程序中使用FlowRouter。在一种情况下,资源直到某个日期/时间才可用,因此我们重定向到另一个路由。是否仍要使用重定向路径替换到受限资源的路由,以便受限资源路由不会出现在浏览器历史记录中。这样做将使历史(使用后退、前进)更加友好

我可以在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使用幕后导航,如果您不能使用
重定向
,那么这应该可以工作:

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

注意:这不是公共API,因此在生产中使用前应仔细测试。

重定向函数必须同步,tho,并且在
触发器
中,我们有一个异步操作,whan-whan。这个解决方案不能完全满足我的需要。太棒了,是的,它成功了,我实际上只需要0毫秒。谢谢里面的独家新闻!