比方说,你有以下路由定义:铁路由器如何确定路由优先级?
@route "home1",
path: "/:homeSlug1
和
@route "home2",
path: "/:homeSlug2
和
@route "home3",
path: "/fixedPath
,然后去localhost:3000/fixedPath
在浏览器
怎么做铁 - 路由器选择优先级?
似乎固定路径路线优先于参数化路线。这可能吗?
比方说,你有以下路由定义:铁路由器如何确定路由优先级?
@route "home1",
path: "/:homeSlug1
和
@route "home2",
path: "/:homeSlug2
和
@route "home3",
path: "/fixedPath
,然后去localhost:3000/fixedPath
在浏览器
怎么做铁 - 路由器选择优先级?
似乎固定路径路线优先于参数化路线。这可能吗?
每当您拨打Router.route(...)
时,该新路线被推送到可能路线数组的后面。当请求进入时,IronRouter会遍历该数组并选取第一个匹配的数组。因此,优先权直接来自您指定路线的顺序。
一看source清楚:
Router.prototype.route = function (path, fn, opts) {
...
var route = new Route(path, fn, opts);
...
this.routes.push(route);
}
后来
Router.prototype.findFirstRoute = function (url) {
var isMatch;
var routeHandler;
for (var i = 0; i < this.routes.length; i++) {
route = this.routes[i];
// only matches if the url matches AND the
// current environment matches.
isMatch = route.handler.test(url, {
where: Meteor.isServer ? 'server' : 'client'
});
if (isMatch)
return route;
}
return null;
};
没有优先权。匹配url表达式的第一条路由将被返回。 /:参数用于定义具有动态数据上下文的单个路由,通常是数据库索引或唯一密钥。