首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快递api中的嵌套路由

快递api中的嵌套路由
EN

Stack Overflow用户
提问于 2015-11-20 00:13:40
回答 2查看 108关注 0票数 0

我试图在我的API中创建以下路由:

代码语言:javascript
复制
/users/compare

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

代码语言:javascript
复制
/users/:slug

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

我能解决这个问题吗?

代码语言:javascript
复制
app.get('/users/:slug', ......);
app.get('/users/compare', ......);

一种方法是创建用户,另一种是确认登录凭据。

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-20 00:40:51

让我解释一下这里发生了什么。

根据声明路由的顺序对路由进行评估。如果您有重叠的路由(多个路由可以匹配给定的URL),那么声明它们的顺序是非常重要的,因为第一个匹配的路径将处理它,而其他路径则不会被攻击。

正如你可能意识到的路线:

代码语言:javascript
复制
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设计,而不是造成这种冲突,那么您应该避免这样做。

我不知道你到底在这里做什么,但也许你应该这样做:

代码语言:javascript
复制
app.get('/userscmd/compare', ......);
app.get('/users/:slug', ......);

或者:

代码语言:javascript
复制
app.get('/userscompare', ......);
app.get('/users/:slug', ......);

你也可以这样做:

代码语言:javascript
复制
app.get('/users/:slug', function(req, res) {
    var param = req.params.slug;
    if (param === "compare") {
        // special slug word
    } else {
        // regular slug
    }
});
票数 2
EN

Stack Overflow用户

发布于 2015-11-20 00:19:42

尝试this....The路由顺序应该有助于解决您的问题(尽管这不是一个维护性的好实践)

首先添加此路由

App.get(‘/用户/比较’,.);

稍后添加此路由

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33816783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档