首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >id在root上的快速路由

id在root上的快速路由
EN

Stack Overflow用户
提问于 2018-01-19 00:08:32
回答 3查看 56关注 0票数 1

这就是我对路由的情况。我已经在处理静态站点(渲染站点)的路由,比如

代码语言:javascript
复制
domain.com/sign-in
domain.com/cookie-policy

现在我正在考虑用id创建路由,比如

代码语言:javascript
复制
domain.com/:id

domain.com/john-and-anna
domain.com/something-different

Id必须是唯一的,用户会选择它,所以我可以在mongodb中创建一个集合,并将id设置为唯一。

问题是,在我看来,快速路由器将处理sign-incookie-policy,也作为ids。因此,我需要以不同的方式处理它们-每次检查用户是否没有将其id设置为sign-incookie-policy (或另一个页面),以及它是否仍然是唯一的。有点一团糟。

我可以通过设置新的路由来解决所有这些问题

代码语言:javascript
复制
domain.com/string/:id

但这不是我想要的第一个目标。

有没有更好的方法来处理这个问题?提前谢谢你。

EN

回答 3

Stack Overflow用户

发布于 2018-01-19 00:12:35

您可以尝试在设置app.get("/:id");之前设置app.get("/sign-in");app.get("/cookie-policy");

Express将按照定义的顺序处理路由。这是不会100%工作的,因为我现在不能测试它,但你可以尝试一下!

编辑:您最好的办法是只创建一个处理程序/:id,检查:id是登录还是cookie策略,并以不同于其他id的方式处理它们。

票数 2
EN

Stack Overflow用户

发布于 2018-01-19 00:21:21

domain.com/:id通常不是一个好主意,除非您有一个简单的规则来区分id和非id(比如id只是数字,而非id永远不是数字)。但是,如果你允许用户选择他们自己的id,而不是强制执行一些严格的规则,让你完全通过一个字符串来识别什么是id,什么不是id,那么你真的不应该使用domain.com/:id,因为这很容易与所有其他顶级资源混淆。

domain.com/id/:id会更好,当一个id被请求时,当它是其他东西时,它是100%明显的,然后id可以明确地是任何用户想要的任何东西(这是在URL中允许的)。当您想要向站点添加更多页面时,请同时考虑现在和将来,这样您就永远不会在哪个请求请求id和哪个请求其他资源之间存在歧义。

如果你真的想让你的用户拥有domain.com/theirchoicehere,那么你必须将所有其他静态资源放在他们自己的子路径中,比如domain.com/sys/logindomain.com/sys/logout,并且不允许用户选择像sys这样的东西,这样ids和你的站点urls之间就不会有冲突。这里的要点是,用户选择的路径名和您用来管理网站的名称需要在不同的命名空间中(而不是在相同的路径位置)。所以,如果你想让他们中的一个在顶层,那么决定哪一个在顶层,并迫使另一个到第二层。

路由是按顺序匹配的,所以您可以先将更具体的路由放在首位,然后再将不太具体的路由(其中包含:id的路由)放在首位,但您仍然必须仔细设计路径结构,以便不会有歧义。

票数 2
EN

Stack Overflow用户

发布于 2018-01-19 00:14:00

快速匹配传入路由的顺序,如果您希望其他路由正常工作,则应在末尾放置domain.com/:id路由处理程序:

代码语言:javascript
复制
domain.com/john-and-anna
domain.com/something-different

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

https://stackoverflow.com/questions/48325579

复制
相关文章

相似问题

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