【问题标题】:node.js :one route call every timenode.js : 每次调用一个路由
【发布时间】:2017-09-23 12:55:53
【问题描述】:

我在sails.js 应用程序中有两条这样的路由

'POST /subscribe',

'GET /:category'

问题是/:category 路由总是为其他所有路由执行而运行

【问题讨论】:

  • 我对帆不太了解,但我认为对于基本的优先规则,您应该将GET/:category 路线放在首位。
  • 我需要先放置哪条规则
  • 这条路线GET/:category
  • 这意味着路线的顶部??
  • 是的,先声明GET /:category

标签: node.js express routes sails.js


【解决方案1】:

由于 cmets 正在更新。

为每个类别创建不同端点的 3 种方法。

  1. 提前定义所有端点。

    /类别/艺术

    /类别/电子产品

    /category/anything_else_you_want

  2. 创建一个端点 /category/:category 来处理 url 的 :category 部分以确定类别和要采取的操作。

    /category/:类别

  3. 解析url查询字符串得到请求的类别。

    /类别

然后在您的端点中执行以下操作。

var params = req.params
var category = params.category

如何从客户端(浏览器)访问上述 3 项

  1. http://www.something.com/category/arts
  2. http://www.something.com/category/arts
  3. http://www.something.com/category?category="艺术"

通过执行 /:category,该端点将匹配其他路由,例如 www.something.com/login 或 www.something.com/admin...您明白了。

让我知道这一切是否有意义。

【讨论】:

  • 但实际上我想列为/:category
  • 其实我想要这样的路线/electronics,/arts
  • 那你需要提前指定。我会修改我的帖子。
  • 没有。你有两个选择来完成你想做的事情。 1. 做我上面提到的。让它成为/category/some_category。 2. 启动服务器时,为每个类别创建单独的端点。例如,您想要的 /arts、/electronics、/anything_else。但是您必须在没有 : 的情况下定义它们。
【解决方案2】:

好的,我不是sails 用户,但我设置了一个快速项目进行测试。我找到了答案,您必须以这种方式将方法显式设置为您的 /:category 路由:

'get /:category': {
    view: 'homepage'
},
'post /subscribe': {
    view: 'sub'
}

如果您想添加另一个 get 路由,请在 /:category 之前添加它:

'get /another-route': {
    view: 'someotherview'
},
'get /:category': {
    view: 'homepage'
},

【讨论】:

    【解决方案3】:

    我维护一个风帆应用程序,我使用这样的路线:

    'GET /:userName': 'MainController.showDashboard',
    

    或类似的东西。我必须小心这条路线,因为它匹配每条路线(每个 GET 都带有一个 /)。例如,如果我希望联系人页面位于myurl.com/contact,我必须在/:userName 通配符路由之前声明该路由:

    'GET /contact': 'MainController.showContactPage',
    'GET /:userName': 'MainController.showDashboard',
    

    如果我把它们反过来,那么 url myurl.com/contact 将被 userName 路由拦截,并路由到 showDashboard 方法,'contact' 被解释为 userName。通过上述排序,/contact 被正确检测并发送到正确的控制器。


    最重要的是,路由检查的匹配顺序与它们在您的 routes.js 文件中出现的顺序相同(无论您使用何种形式的声明),所以如果您有一个包罗万象的信息(如 /:category) ,你应该把它放在最后。

    【讨论】:

      猜你喜欢
      • 2018-01-18
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多