Iron-router是如何确定路由优先级的?
How does Iron-router determine route priority?
假设您有以下路由定义:
@route "home1",
path: "/:homeSlug1
和
@route "home2",
path: "/:homeSlug2
和
@route "home3",
path: "/fixedPath
然后在浏览器中转到 localhost:3000/fixedPath
Iron-Router如何选择优先级?
固定路径路由似乎没有优先于参数化路由。这可能吗?
没有优先级。将返回匹配 url 表达式的第一条路由。 /: 参数用于定义具有动态数据上下文的单个路由,通常是数据库索引或唯一键。
每次调用 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;
};
假设您有以下路由定义:
@route "home1",
path: "/:homeSlug1
和
@route "home2",
path: "/:homeSlug2
和
@route "home3",
path: "/fixedPath
然后在浏览器中转到 localhost:3000/fixedPath
Iron-Router如何选择优先级?
固定路径路由似乎没有优先于参数化路由。这可能吗?
没有优先级。将返回匹配 url 表达式的第一条路由。 /: 参数用于定义具有动态数据上下文的单个路由,通常是数据库索引或唯一键。
每次调用 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;
};