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

Sails.js custom route with same controller but different layouts

今天我来这里不仅仅是为了检查好的答案,而是为了提问! 我想使用 Sails.js 及其 routes.js 执行以下操作:

我想要的是根据登录用户的类型实际提供不同的布局。我知道该怎么做,但我不想在 routes.js 文件中写这个(因为它很乱,我不想创建控制器来完成路由本身的工作):

'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'
}}

这有可能吗?

好的,我想我正在根据评论阅读您想要的内容 - 您希望普通用户和管理员用户有不同的行为。您将在 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
}

在您看来,路由中设置的局部变量仍然可以访问,如果需要,您可以在控制器中添加额外的局部变量。希望这就是您要找的!