Sails.js具有相同控制器但布局不同的自定义路由

时间:2017-09-29 17:47:01

标签: routes sails.js ejs custom-routes

今天我不仅要检查好的答案,还要问! 我想使用Sails.js及其routes.js:

执行以下操作

My problem picture

我想要的是根据登录用户的类型实际提供不同的布局。我知道如何做到这一点,但我不想在'get /adminSpace/*' : { controller : 'adminSpace' //setting layout on controller }, 'get /userSpace/*' : { controller : 'userSpace' // //setting layout on controller } 文件上写这个(因为它很乱)我不想创建控制器来完成路线本身的工作):

'get /[user|admin]/projects/*' : {
    controller : 'project'
    locals: {
      layout: 'based_on_url'
}}

如果可能的话,快速方法就是这样写:

{{1}}

这有可能吗?

1 个答案:

答案 0 :(得分:0)

好的,我认为我正在根据评论阅读您想要的内容 - 您希望普通用户和管理员用户采用不同的行为。您将拥有在routes.js文件和views文件中处理此问题的代码,但您希望控制器能够忽略这些差异 - 他们可以做到这一点而无需检测“ admin vs normal“。

您可以通过在指向同一控制器的两条不同路线上设置本地人来实现此目的:

'GET /adminSpace/*' : {
    controller : 'UserController',
    locals: {
        admin: true,
        _layoutFile: 'admin'
    }
},
'GET /userSpace/*' : {
    controller : 'UserController', // same as above
    locals: {
        admin: false,
        _layoutFile: 'user'
    }
},

然后在UserController

someAction: function(req, res) {
    // any logic needed
    // can access sails.locals.admin if necessary, but do not have to
    return res.view(); // will use admin.ejs or users.ejs as set in route
}

在您的视图中,路径中设置的本地人仍然可以访问,如果需要,您可以在控制器中添加额外的本地人。希望这是你想要的!