Javascript 路由匹配中的模糊性

Javascript 路由匹配中的模糊性,javascript,node.js,rest,restify,Javascript,Node.js,Rest,Restify,正在走错误的路线并造成歧义 我有两条路线: apiRouter.get({ path: '/goals/:id', version: '1.0.0' }, goals.getGoal); apiRouter.get({ path: '/goals/mute', version: '1.0.0' }, lists.getGoalMute); 当我在/goals/mute上请求时,它会进入/goals/:id 我切换了路线(将较低的路线向上移动): 现在请求进入正确的路径/goals/mute /

正在走错误的路线并造成歧义

我有两条路线:

apiRouter.get({ path: '/goals/:id', version: '1.0.0' }, goals.getGoal);
apiRouter.get({ path: '/goals/mute', version: '1.0.0' }, lists.getGoalMute);
当我在
/goals/mute
上请求时,它会进入
/goals/:id

我切换了路线(将较低的路线向上移动):

现在请求进入正确的路径
/goals/mute

/goals/:id      /goals/something    //here "something" will be "id"
/goals/mute     /goals/something    //here "something" will be "mute"

我不理解这种行为,什么是匹配标准
restify
使用的?

路由按创建顺序匹配


由于
/goals/:id
匹配
/goals/mute
,如果在后者之前定义前者,它将在更具体的路由之前匹配
/goals/mute

您的路由是相似的。所以现在一切都取决于路线的顺序

/goals/:id      /goals/something    //here "something" will be "id"
/goals/mute     /goals/something    //here "something" will be "mute"
/goals/:id
/goals/mute
完全相同

/goals/:id      /goals/something    //here "something" will be "id"
/goals/mute     /goals/something    //here "something" will be "mute"
您必须更改路线的顺序:

/goals/mute
/goals/:id
现在它将首先与
/goals/mute
匹配,然后与
/goals/:id
匹配


因此,如果你点击
/goals/
,它将转到
/goals/:id

,那么我该怎么做才能让它走上正确的路线呢?将更具体的路线(
/goals/mute
)放在不太具体的路线(
/goals/:id
)之前。