快递中的嵌套路线 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
}
});
我正在尝试在我的 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
}
});