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

gin*_*nad 5 node.js sails.js

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

sgr*_*454 18

你绝对可以做到这一点.诀窍是,在您的情况下,控制器标识是它的路径admin/PageController.所以自定义路线config/routes.js将是这样的:

'GET /admin/page/foo': 'admin/PageController.foo'
Run Code Online (Sandbox Code Playgroud)

最棒的是,自动操作仍然有效,因此如果您index在控制器中有操作,那么浏览/admin/page将自动运行它.

您也可以使用创建这样的控制器sails generate controller admin/page.


mar*_*ebl 9

编辑

提交8e57d61开始,您可以执行此操作以获取blueprint嵌套控制器上的路由和功能,假设项目中有AdminPage模型:

// api/controllers/admin/PageController.js
module.exports = {
  _config: {
    model: 'adminpage'
  }
}
Run Code Online (Sandbox Code Playgroud)

或这个:

// config/routes.js
module.exports.routes = {
  'admin/page': {
    model: 'adminpage'
  }
}
Run Code Online (Sandbox Code Playgroud)

老答案

你的选择

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

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

    npm install -g git://github.com/marionebl/sails.git#override-controller-model
    
    Run Code Online (Sandbox Code Playgroud)

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

    // api/controllers/admin/PageController.js
    ...
    module.exports = {
      _config: {
        model: 'page'
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

说明

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

例如api/controllers/UserController.js,api/models/User.js共享相同的标识user,因此如果启用了蓝图路由,则会挂载蓝图路由config/blueprints.js.

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

可以在Github上检查负责此行为的源.


dba*_*sch 6

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

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

在此输入图像描述