node.js:每次一次路由调用

时间:2017-09-23 12:55:53

标签: node.js express routes sails.js

我在sails.js应用程序中有两条路径,就像这样

'POST /subscribe',

'GET /:category'

问题是/:category路由总是为每个其他路由执行运行

3 个答案:

答案 0 :(得分:1)

由于评论而更新。

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

  1. 提前定义所有端点。

    /类别/艺术

    /类别/电子

    /类别/ anything_else_you_want

  2. 创建一个端点/类别/:类别,用于处理网址的:类别部分以确定类别以及要采取的操作。

    /类别/:类别

  3. 解析url查询字符串以获取请求的类别。

    /分类

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

    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= “艺术”
    4. 通过执行/:类别,该端点将匹配其他路由,例如www.something.com/login或www.something.com/admin...you得到了这一点。

      如果一切都有道理,请告诉我。

答案 1 :(得分:1)

好的,我不是风帆用户,但我设置了一个快速项目进行测试。我找到了答案,你必须以这种方式明确地将方法设置为/:category路线:

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

如果您想添加另一条获取路线,请以/:category之前的方式添加:

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

答案 2 :(得分:0)

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

'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文件中出现的顺序相同(无论您使用什么形式的声明),所以如果你有一个全能(如{{{ 1}}),你应该把它放在最后。