【问题标题】:Sails.js custom route with same controller but different layoutsSails.js 自定义路由具有相同的控制器但不同的布局
【发布时间】:2017-09-29 17:47:01
【问题描述】:

今天我在这里不仅要检查好的答案,还要提问! 我想使用 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'
}}

这有可能吗?

【问题讨论】:

  • 明确一点,我不想添加中间人之类的 AdminSpaceController 和 UserSpaceController 来设置布局!然后为每个角色专门化每个控制器 url。有什么建议吗?
  • Sails 路线可以做一些非常棘手的事情:sailsjs.com/documentation/concepts/routes/custom-routes 但我的直觉告诉我,为什么不使用你的控制器呢?我不确定路由文件中设置的本地人是否可以访问从路由本身或其他动态数据中提取的通配符(如 [user|admin] 等)。
  • 我也觉得两条路线可能更简单!查看您的代码的其他开发人员当然可以更快地理解两条路由,而不是必须解析用于将正则表达式放入路由中的有趣语法。
  • 嗯,我的总体思路是这样的:解决用户类型 -> 使用模型适当的控制器。如果不能这样做,那么我需要为每个控制器操作重复一大块代码,例如 if(requester == admin) { (set layout here)} else {}。明白我的意思了吗?我想要的是一个常见的地方来放置它,然后在不了解所需布局的情况下使用我的控制器。

标签: routes sails.js ejs custom-routes


【解决方案1】:

好的,我想我正在根据 cmets 阅读您想要的内容 - 您希望普通用户和管理员用户有不同的行为。您将在 routes.js 文件和 views 中拥有处理此问题的代码,但您希望控制器忽略差异 - 他们可以做自己的事情而无需费心检测“管理员与正常” .

您可以通过在指向同一个控制器的两条不同路由上设置本地变量来做到这一点:

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

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

【讨论】:

    猜你喜欢
    • 2017-04-15
    • 2014-10-07
    • 2017-03-10
    • 2023-04-10
    • 2013-09-24
    • 2016-03-29
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多