Sails.js 帆船定制航线

Sails.js 帆船定制航线,sails.js,Sails.js,以下是我的应用程序自定义路由。有没有更好的方法或组织它们?我讨厌在添加新模块时创建一组自定义路由。理想情况下,我希望这样做,而不必定义其中任何一个。由于我的URL运行的深度不多,我不会利用默认的Controller/Action/:id路由 添加大量自定义路由是否会影响应用程序性能?谢谢你的帮助 'get /location/:locationId/equipment/new' : 'LocationController.equipmentNew', 'get /location

以下是我的应用程序自定义路由。有没有更好的方法或组织它们?我讨厌在添加新模块时创建一组自定义路由。理想情况下,我希望这样做,而不必定义其中任何一个。由于我的URL运行的深度不多,我不会利用默认的Controller/Action/:id路由

添加大量自定义路由是否会影响应用程序性能?谢谢你的帮助

'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
以及api/models文件夹中的四个模型:

  • Equipment.js
  • Employee.js
  • Manager.js
  • Location.js
然后不做任何工作,当你扬帆时,你就能做类似的事情

  • GET/manager?location=5
    列出位置5的所有经理
  • POST/equipment
    创建新设备
  • PUT/employee/123
    更新employee 123
将所有内容提升到第一级,然后使用诸如
?location=5
之类的查询来过滤输出,这会使所有内容更加清晰


如果您担心这样可以查看各个位置的所有员工,或者如果某些用户只能查看某些位置,那么您可以使用来控制,这正是为了访问控制。只需添加一个策略,确保在参数中为每个“get Manager”调用设置一个位置,或者检查当前登录的用户是否有权查看他们试图访问的位置。

您的API似乎可以进行一些重构。您有四个模型(
设备
员工
经理
位置
),但您要在API中的
位置
下为它们命名。相反,它们都可以是一级端点,允许您使用Sails来处理路由。例如,如果删除了所有这些自定义管线,并在api/controllers文件夹中创建了四个控制器:

  • EquipmentController.js
  • EmployeeController.js
  • ManagerController.js
  • LocationController.js
以及api/models文件夹中的四个模型:

  • Equipment.js
  • Employee.js
  • Manager.js
  • Location.js
然后不做任何工作,当你扬帆时,你就能做类似的事情

  • GET/manager?location=5
    列出位置5的所有经理
  • POST/equipment
    创建新设备
  • PUT/employee/123
    更新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
};