快递中的嵌套路线 api

nested route in express api

我正在尝试在我的 API 中创建以下路线:

/users/compare

问题是..我不能,因为我已经有:

/users/:slug

所以..当我尝试访问 /users/compare 时,我将访问 /users/:slug

我可以解决这个问题吗?

app.get('/users/:slug', ......);
app.get('/users/compare', ......);

一条路线用于创建用户,另一条路线用于确认登录凭据。

非常感谢。

试试这个....路由的顺序应该有助于解决您的问题(尽管这不是可维护性的好习惯)

首先添加这条路线

app.get('/users/compare', ......);

稍后添加这条路线

app.get('/users/:slug', ......);

让我解释一下这里发生的事情。

路由按照您声明它们的顺序进行评估。如果你有重叠的路线(其中不止一条路线可以匹配给定的 URL),那么你声明它们的顺序非常重要,因为第一个匹配它的将处理它,而其他人将不会得到机会在

你可能知道路线:

app.get('/users/:slug', ......);

将匹配 /users/anything。所以,这几乎意味着任何以 /users/ 开头的东西都会匹配这条路线。如果你把这条路线放在第一位,在你的 app.get('/users/compare', ......); 路线之前,那么 /users/:slug 将匹配 URL /users/compare 并且它将处理该请求。因此,您 /users/compare 的路线将永远不会被调用。

如果你把 /users/compare 放在前面,那么它会在 URL /users/compare 处获得第一个破解,并且它会正常工作。

一般来说,最好设计一个没有这些类型冲突的URL方案。我不能说你永远不应该这样做,因为有时会有非常好的例外情况,只需要你适当地排序你的路线,但一般来说,如果有 different/better 的方式来组织你的 URL 不会产生这种冲突的设计。

我不知道你在这里做什么,但也许你应该做这样的事情:

app.get('/userscmd/compare', ......);
app.get('/users/:slug', ......);

或:

app.get('/userscompare', ......);
app.get('/users/:slug', ......);

你也可以这样做:

app.get('/users/:slug', function(req, res) {
    var param = req.params.slug;
    if (param === "compare") {
        // special slug word
    } else {
        // regular slug
    }
});