简单的页面应用程序路由到相同的视图或控制器SailsJS

时间:2014-03-21 14:13:34

标签: sails.js

如何将多个网址路由到同一控制器或视图以使用有角度的单页应用?

我能做到这一点,但我觉得很丑..

'/': {
    view: 'homepage'
},
'/login': {
    view: 'homepage'
},
'/register': {
    view: 'homepage'
},
'/troller': {
    view: 'homepage'
}, 
............

我想要像

那样的想法
['/','/login','/register','/troller'] -> view: 'homepage'

还有其他问题,我可以使用正则表达式进行路由吗?

THX !!抱歉我的英语。

3 个答案:

答案 0 :(得分:4)

您目前无法使用真正的正则表达式进行路由。但是,您可以使用通配符路径来执行您想要的操作(在一个视图中瞄准多个路径)。

将它放在/config/routes.js对象的末尾:

'/*': function(req, res, next) {
         if (req.path.match(/\..*/g)) {
            return next();
         } else {
            return res.view('homepage');
         }
      }

并且上面的其中一条路线不匹配的所有内容都将执行该功能。该函数首先检查您是否尝试访问静态资产(具有文件扩展名的内容,如.js.css),如果是,则继续匹配路由,以便Express静态中间件可以服务器文件。否则,它将为您的视图提供服务。

<强>更新

从Sails v0.10.0-rc5开始,正则表达式可用于定义路由。来自the docs

正则表达式路由的语法是:

"r|<regular expression string>|<comma-delimited list of param names>"

这是字母“ r ”,后跟管道,没有分隔符的正则表达式字符串,另一个管道以及应该映射到正则表达式中带括号的组的参数名称列表。例如:

"r|^/\d+/(\w+)/(\w+)$|foo,bar": "MessageController.myaction"

将匹配 / 123 / abc / def ,运行myaction的{​​{1}}操作并提供值MessageControllerabc作为{分别为{1}}和def

答案 1 :(得分:0)

您还可以使用|运算符

同时路由它们
'/' | '/login' | '/register' | '/troller': {
                         view: 'homepage'
}

答案 2 :(得分:0)

我不知道你的方法是否成功,但在我的脑海中将角度路由客户端映射到节点路由服务器端是误导性的。我对这两个库的单页面应用程序的方法是:

  1. 使用默认的sails视图提供索引和angular.js
  2. 将角度路线与控制器等一起用于客户端路线
  3. 以角度
  4. 管理完整的用户界面和页面流
  5. 使用带有角度资源的默认sails api来处理节点模型(不要忘记使用promises)
  6. 使用node / sails路由在需要时添加特殊内容(例如登录管理)
  7. 使用css框架编译css(例如用罗盘或更少的sass)