路由匹配中的歧义



Restify遇到不正确的路线并造成歧义。

我有2条路线:

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使用的匹配标准是什么?

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

/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/:id匹配/goals/mute,如果在后者之前定义前者,它将在更具体的路由之前匹配/goals/mute