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

MGD*_*are 5 sails.js

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

我能做到这一点,但我认为是丑陋的..

'/': {
    view: 'homepage'
},
'/login': {
    view: 'homepage'
},
'/register': {
    view: 'homepage'
},
'/troller': {
    view: 'homepage'
}, 
............
Run Code Online (Sandbox Code Playgroud)

我想要一些想法

['/','/login','/register','/troller'] -> view: 'homepage'
Run Code Online (Sandbox Code Playgroud)

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

谢谢!!抱歉我的英语

sgr*_*454 4

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

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

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

与上面的路由之一不匹配的所有内容都将执行该函数。该函数首先检查您是否正在尝试访问静态资源(带有文件扩展名的内容,例如.js.css),如果是,则继续匹配路由,以便 Express 静态中间件可以为该文件提供服务。否则,它将服务于您的视图。

更新

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

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

"r|<regular expression string>|<comma-delimited list of param names>"
Run Code Online (Sandbox Code Playgroud)

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

"r|^/\d+/(\w+)/(\w+)$|foo,bar": "MessageController.myaction"
Run Code Online (Sandbox Code Playgroud)

将匹配/123/abc/def,运行myaction的操作MessageController并分别提供值abcdefasreq.param('foo')req.param('bar')