2015-05-07 95 views
2

比方说,你有以下路由定义:铁路由器如何确定路由优先级?

@route "home1", 
     path: "/:homeSlug1 

@route "home2", 
     path: "/:homeSlug2 

@route "home3", 
     path: "/fixedPath 

,然后去localhost:3000/fixedPath在浏览器

怎么做铁 - 路由器选择优先级?

似乎固定路径路线优先于参数化路线。这可能吗?

回答

2

每当您拨打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; 
}; 
0

没有优先权。匹配url表达式的第一条路由将被返回。 /:参数用于定义具有动态数据上下文的单个路由,通常是数据库索引或唯一密钥。