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;
};