Meteor useraccounts 路由和路由优先级:如何确保首先命中静态路由?

Meteor useraccounts routes and route priority: how to ensure static routes are hit first?

我正在使用 meteor useraccounts 和 iron-router,但我猜这将同样适用于 flow-router。

使用 Meteor 用户帐户,您可以 configure/add 登录、忘记 PWD 等路由...通过如下代码:

AccountsTemplates.configureRoute('signIn', {
    name: 'signin',
    path: '/login',
    template: 'myLogin',
    layoutTemplate: 'myLayout',
    redirect: '/user-profile',
});

这一切都很好,但我还想允许根参数化路由,例如:

Router.route '/:rootParam',
  name: 'rootParam'
  controller: share.WikiController
  onBeforeAction: ->
    rootParam = @params.rootParam
    if rootParam in share.staticRoutes
      Router.go(rootParam)  
    else
      @next()

因此,如果用户转到带有项目 ID 的路由,它可以工作,但如果他们转到静态用户帐户路由,如 /login,事情也可以工作。

我发现它总是命中参数路由,而静态路由从不工作。

我建议的一件事是,如果可以的话,不要让你的路径的一部分超载,因为这可能会导致混淆哪条路线会被捕获。 /:itemid 会赶上 /login 吗?如果您只看到 /:itemid 路线,那将很有意义。

尝试使用 /items/:itemid 之类的东西,以便 /login/items 是静态且唯一的。

Router.route('/items/:itemid', function () {
    var item = Items.findOne({_id: this.params.itemid});
    this.render('ShowItem', {data: item});
});

如果你真的想要 / 路由到 /items/:itemid 你仍然可以在你的路由函数中做一个重定向。

Router.route('/', function () {
    //TODO: redirect to /items/:itemid
});

您不能在 onBeforeAction 中执行 Router.go()。但是,您可以渲染路线。如果您的命名路线使用不同的布局,您可能还必须更改 layoutTemplate