Is it possible to group controllers in sails using subfolders?

浪子不回头ぞ 提交于 2019-11-27 07:03:40

问题


I'm planning to organize my controllers in sails using subfolder but I'm not sure how to do it. When I tried using like admin/PageController.js and connect it with the route I keep getting a 404 error.


回答1:


You can definitely do this. The trick is, the controller identity is its path, in your case admin/PageController. So a custom route in config/routes.js would be something like:

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

The great thing is, automatic actions still work, so if you have an index action in the controller then browsing to /admin/page will automatically run it.

You can also create controllers like this with sails generate controller admin/page.




回答2:


Edit

Since commit 8e57d61 you can do this to get blueprint routes and functionality on nested controllers, assuming there is an AdminPage model in your project:

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

or this:

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

Old Answer

Your options

  1. Defining explicit routes to your grouped controllers in config/routes.js. Look at Scott Gress' answer for more details.

  2. (If you are a bit adventurous) As i had the exact same requirement for a project of mine I created a Pull Request on Sails that allows you to override the model - controller association. You could install it via

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

    Assuming it is the api/models/Page.js model you want the blueprint methods for on api/controllers/admin/PageController.js you then could do:

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

Explanation

While generating/creating grouped controllers like this is perfectly valid an possible, you will not get the default blueprint routes you'd expect for controllers accompanied by models with the same identity.

E.g. api/controllers/UserController.js and api/models/User.js share the same identity user, thus the blueprint routes are mounted if they are enabled in config/blueprints.js.

In fact at the moment it is not possible to group models into subfolders in a valid way. This means you won't be able to create a model that matches the identity admin/page of your controller api/controllers/admin/PageController.js - the blueprint routes are not mounted for PageController.

The source responsible for this behavior can be inspected on Github.




回答3:


I made a diagram that shows how implicit routes, explicit policies, nested controllers, singular models and nested views are related. It does not show an overridden model-controller association as described by @marionebl.

It was mostly an exercise for me to understand this topic better, but I hope it helps somebody else too. Please let me know if I made any mistakes:




回答4:


Thanks merionebl, its work fine for me and I want to share with all guys my answer derived from merionebl answer.

/config/routes.js

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

My aim is not repeat answer just have upgrade and clear example.

Thanks



来源:https://stackoverflow.com/questions/22059833/is-it-possible-to-group-controllers-in-sails-using-subfolders

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!