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
。
我正在使用 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
。