Sails.js 帆船定制航线
以下是我的应用程序自定义路由。有没有更好的方法或组织它们?我讨厌在添加新模块时创建一组自定义路由。理想情况下,我希望这样做,而不必定义其中任何一个。由于我的URL运行的深度不多,我不会利用默认的Controller/Action/:id路由 添加大量自定义路由是否会影响应用程序性能?谢谢你的帮助Sails.js 帆船定制航线,sails.js,Sails.js,以下是我的应用程序自定义路由。有没有更好的方法或组织它们?我讨厌在添加新模块时创建一组自定义路由。理想情况下,我希望这样做,而不必定义其中任何一个。由于我的URL运行的深度不多,我不会利用默认的Controller/Action/:id路由 添加大量自定义路由是否会影响应用程序性能?谢谢你的帮助 'get /location/:locationId/equipment/new' : 'LocationController.equipmentNew', 'get /location
'get /location/:locationId/equipment/new' : 'LocationController.equipmentNew',
'get /location/:locationId/equipment/create' : 'LocationController.equipmentCreate',
'get /location/:locationId/equipment/edit/:id' : 'LocationController.equipmentEdit',
'get /location/:locationId/equipment/update/:id' : 'LocationController.equipmentUpdate',
'get /location/:locationId/equipment/list' : 'LocationController.equipmentList',
'get /location/:locationId/equipment/show/:id' : 'LocationController.equipmentShow',
'get /location/:locationId/equipment/delete/:id' : 'LocationController.equipmentDelete',
'get /location/:locationId/employee/new' : 'LocationController.employeeNew',
'get /location/:locationId/employee/create' : 'LocationController.employeeCreate',
'get /location/:locationId/employee/edit/:id' : 'LocationController.employeeEdit',
'get /location/:locationId/employee/update/:id' : 'LocationController.employeeUpdate',
'get /location/:locationId/employee/list' : 'LocationController.employeeList',
'get /location/:locationId/employee/show/:id' : 'LocationController.employeeShow',
'get /location/:locationId/employee/delete/:id' : 'LocationController.employeeDelete',
'get /location/:locationId/manager/new' : 'LocationController.managerNew',
'get /location/:locationId/manager/create' : 'LocationController.managerCreate',
'get /location/:locationId/manager/edit/:id' : 'LocationController.managerEdit',
'get /location/:locationId/manager/update/:id' : 'LocationController.managerUpdate',
'get /location/:locationId/manager/list' : 'LocationController.managerList',
'get /location/:locationId/manager/show/:id' : 'LocationController.managerShow',
'get /location/:locationId/manager/delete/:id' : 'LocationController.managerDelete',
'get /location/:locationId/participate' : 'LocationController.participate',
是的,这是可能的,但您必须使用express中间件编写自己的请求路由器 在SailsJS中,每个都是一个中间件。您可以将自定义参数与URL中的控制器和操作名称一起传递,并直接从策略调用相关的控制器操作 首先,您需要为带有和不带:id参数的操作定义路由 config/routes.js 接下来,您需要编写代码,根据URL参数将请求重定向到控制器和操作 api/policies/router.js 然后,可以在单独的文件中定义控件: api/controllers/EmployeeController.js和api/controllers/EquipmentController.js 重要提示:记住保护您不想暴露的操作
希望这会有所帮助。是的,这是可能的,但您必须使用express中间件编写自己的请求路由器 在SailsJS中,每个都是一个中间件。您可以将自定义参数与URL中的控制器和操作名称一起传递,并直接从策略调用相关的控制器操作 首先,您需要为带有和不带:id参数的操作定义路由 config/routes.js 接下来,您需要编写代码,根据URL参数将请求重定向到控制器和操作 api/policies/router.js 然后,可以在单独的文件中定义控件: api/controllers/EmployeeController.js和api/controllers/EquipmentController.js 重要提示:记住保护您不想暴露的操作
希望能有所帮助。您的API似乎需要一些重构。您有四个模型(
设备
、员工
、经理
和位置
),但您要在API中的位置
下为它们命名。相反,它们都可以是一级端点,允许您使用Sails来处理路由。例如,如果删除了所有这些自定义管线,并在api/controllers文件夹中创建了四个控制器:
- EquipmentController.js
- EmployeeController.js
- ManagerController.js
- LocationController.js
- Equipment.js
- Employee.js
- Manager.js
- Location.js
列出位置5的所有经理GET/manager?location=5
创建新设备POST/equipment
更新employee 123PUT/employee/123
?location=5
之类的查询来过滤输出,这会使所有内容更加清晰
如果您担心这样可以查看各个位置的所有员工,或者如果某些用户只能查看某些位置,那么您可以使用来控制,这正是为了访问控制。只需添加一个策略,确保在参数中为每个“get Manager”调用设置一个位置,或者检查当前登录的用户是否有权查看他们试图访问的位置。您的API似乎可以进行一些重构。您有四个模型(
设备
、员工
、经理
和位置
),但您要在API中的位置
下为它们命名。相反,它们都可以是一级端点,允许您使用Sails来处理路由。例如,如果删除了所有这些自定义管线,并在api/controllers文件夹中创建了四个控制器:
- EquipmentController.js
- EmployeeController.js
- ManagerController.js
- LocationController.js
- Equipment.js
- Employee.js
- Manager.js
- Location.js
列出位置5的所有经理GET/manager?location=5
创建新设备POST/equipment
更新employee 123PUT/employee/123
?location=5
之类的查询来过滤输出,这会使所有内容更加清晰
如果您担心这样可以查看各个位置的所有员工,或者如果某些用户只能查看某些位置,那么您可以使用来控制,这正是为了访问控制。只需添加一个策略,确保在参数中为每个“get Manager”调用设置位置,或者检查当前登录的用户是否有权查看他们试图访问的位置
/locations/:locationId/:controller/:action : { policy: 'router' }
/locations/:locationId/:controller/:action/:id : { policy: 'router' }
module.exports = function (req, res, next) {
var controller = req.param('controller');
var action = req.param('action');
sails.controllers[controller][action](req, res);
};
module.exports = {
new: function(req, res) {
var params = req.params.all();
// ...
},
// ... other actions
};