【问题标题】:What to do when one route "blocks" another?当一条路线“阻塞”另一条路线时该怎么办?
【发布时间】:2015-03-10 23:00:41
【问题描述】:

我正在使用 nodejs(带有sailsjs),但我遇到了路由问题,情况如下:

  • 我有一个处理 url '/user/?variable' 的路由。它链接到 显示配置文件的控制器操作,具体取决于变量 给定的;如果未找到用户,则返回 404 错误
  • 我有第二条路由处理'/user/find'。它与一个 用于返回用户的 AJAX 请求的控制器操作 id 给定传递给它的变量。

但是,当我使用 AJAX 请求调用 '/user/find/' 时,我会收到 404 错误;我猜这是因为它仍然链接到“显示配置文件”操作,并且该操作找不到名为“find”的用户。

这种冲突在框架之间是否常见?有没有办法解决这个问题?我尝试切换声明路由的顺序,但响应是相同的。我想如果用户使用用户名“find”注册也可能会导致冲突,在这种情况下,我将如何处理它?还是我应该使用完全不同的路线?

我喜欢/user/find,因为这个名字很简单。

谢谢。

【问题讨论】:

  • 这是一种非常肮脏的做法,但是在 '/user/?variable' 路由内部,您可以使用 if 语句检查是否 ?variable == 'find' 然后分支从那里出发。这是一个方便的解决方案,但它成为以后维护的噩梦。
  • 是的,我想这会很快变得笨拙,尤其是如果我向 /user/ 添加其他方法时。嗯,总而言之,你会建议我只为这种情况留下这条路线吗?我想知道 Facebook 是如何做到的,据我所知,他们有域/用户名和域/工具 URL。
  • 现在我正在检查网络,看看是否有办法给予 '/user/find' 优先级。理想情况下,在最坏的情况下,应该按照注册的顺序检查它们,所以我不知道为什么你切换它们的顺序时没有变化。
  • 是的,应该有路由排序:sailsjs.org/#!/documentation/concepts/Routes/… 在“路由排序”下查看。您确定 /user/find/ 页面存在吗?
  • 哇,这确实有效。这是我的错误,因为我想我第一次没有保存排序更改,然后重新启动框架,我认为它没有效果。我又这样做了,效果很好。谢谢!不过,如果用户被命名为“find”,我仍然想知道该怎么做,但我会考虑什么是最好的。再次感谢您。

标签: node.js express routes sails.js


【解决方案1】:

当您在 app.js 或您提交订单的任何文件中声明您的路线时。

app.get("/user/find", function (request, response) {
    //do something
});

app.get("/user/:variable", function (request, response) {
    //do something
});

在上面的示例中,/user/find 优先于 /user/:variable,因为它首先被声明。如果您需要这样做,我建议您使用声明的顺序。如果您将其切换到以下内容,它应该可以工作。

app.get("/user/:variable", function (request, response) {
    //do something
});

app.get("/user/find", function (request, response) {
    //do something
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多