是否可以使用子文件夹将控制器分组到风帆中?

时间:2014-02-27 05:31:54

标签: node.js sails.js

我打算使用子文件夹在风帆中组织我的控制器,但我不知道该怎么做。当我尝试使用admin / PageController.js并将其与路由连接时,我一直收到404错误。

4 个答案:

答案 0 :(得分:18)

你绝对可以做到这一点。诀窍是,控制器标识是它的路径,在你的情况下是admin/PageController。因此,config/routes.js中的自定义路线类似于:

'GET /admin/page/foo': 'admin/PageController.foo'

最棒的是,自动操作仍然有效,因此如果您在控制器中执行index操作,则浏览到/admin/page会自动运行它。

您还可以使用sails generate controller admin/page创建此类控制器。

答案 1 :(得分:9)

修改

commit 8e57d61开始,您可以在嵌套控制器上获取blueprint路由和功能,假设项目中有AdminPage模型:

// api/controllers/admin/PageController.js
module.exports = {
  _config: {
    model: 'adminpage'
  }
}

或者这个:

// config/routes.js
module.exports.routes = {
  'admin/page': {
    model: 'adminpage'
  }
}

旧答案

您的选择

  1. config/routes.js中定义到分组控制器的显式路由。 请查看Scott Gress的答案以获取更多详细信息。

  2. (如果你有点喜欢冒险)因为我对我的项目有完全相同的要求,我在Sails上创建了一个Pull Request,允许你覆盖模型 - 控制器关联。你可以通过

    安装它
    npm install -g git://github.com/marionebl/sails.git#override-controller-model
    

    假设它是api/models/Page.js模型,您需要api/controllers/admin/PageController.js上的蓝图方法,那么您可以这样做:

    // api/controllers/admin/PageController.js
    ...
    module.exports = {
      _config: {
        model: 'page'
      }
    }
    
  3. <强>解释

    虽然生成/创建这样的分组控制器是完全有效的,但是您将无法获得控制器所伴随的具有相同标识的模型的默认蓝图路径。

    E.g。 api/controllers/UserController.jsapi/models/User.js共享相同的身份user,因此如果在config/blueprints.js中启用了蓝图路由,则会装入蓝图路径。

    事实上,目前无法以有效的方式将模型分组到子文件夹中。这意味着您将无法创建与控制器admin/page的标识api/controllers/admin/PageController.js匹配的模型 - 未为PageController安装蓝图路由。

    负责此行为的来源can be inspected on Github

答案 2 :(得分:6)

我制作了一个图表,显示隐式路由,显式策略,嵌套控制器,奇异模型和嵌套视图是如何相关的。它没有显示@marionebl描述的重写的模型 - 控制器关联。

对我来说,这主要是为了更好地理解这个主题,但我希望它能帮助其他人。如果我犯了任何错误,请告诉我。

enter image description here

答案 3 :(得分:0)

谢谢merionebl,它的工作对我很好,我想与所有人分享我从merionebl回答中得到的答案。

<强> /config/routes.js

  'get /admin/user' : { 
    controller: "Admin/UserController", action: "find",
    model : 'user',
  },

我的目标不是重复回答只是有升级和明确的例子。

由于