我试图在我的API中创建以下路由:
/users/compare问题是..。我不能,因为我已经:
/users/:slug所以..。当我尝试访问/users/compare时,我将访问/users/:slug
我能解决这个问题吗?
app.get('/users/:slug', ......);
app.get('/users/compare', ......);一种方法是创建用户,另一种是确认登录凭据。
非常感谢。
发布于 2015-11-20 00:40:51
让我解释一下这里发生了什么。
根据声明路由的顺序对路由进行评估。如果您有重叠的路由(多个路由可以匹配给定的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方案。我不能说您永远不应该这样做,因为有时会有非常好的例外情况,只需要您适当地安排您的路径,但是通常,如果有一种不同的/更好的方法来组织您的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
}
});发布于 2015-11-20 00:19:42
尝试this....The路由顺序应该有助于解决您的问题(尽管这不是一个维护性的好实践)
首先添加此路由
App.get(‘/用户/比较’,.);
稍后添加此路由
app.get('/users/:slug',.);
https://stackoverflow.com/questions/33816783
复制相似问题