路线匹配中的歧义

时间:2015-12-29 10:33:23

标签: javascript node.js rest restify

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

我切换了路线(将较低的路线移到了):

apiRouter.get({ path: '/goals/mute', version: '1.0.0' }, lists.getGoalMute);
apiRouter.get({ path: '/goals/:id', version: '1.0.0' }, goals.getGoal);

现在请求获取正确的路由/goals/mute

我不明白这种行为,restify使用的匹配条件是什么?

2 个答案:

答案 0 :(得分:3)

你的路线很相似。所以现在一切都取决于路线的顺序。

/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

答案 1 :(得分:0)

路线按其创建顺序进行匹配。

由于/goals/:id/goals/mute匹配,如果您在前者之前定义前者,则会在/goals/mute的更具体路线之前匹配。