蓝图路线
当你运行启用了蓝图的 sails lift
时,框架会检查你的控制器,模型和配置,以便自动绑定某些路由。这些隐式蓝图路由允许你的应用响应某些请求,而无需在 config/routes.js
文件中手动绑定这些路由。默认情况下,蓝图路由指向其对应的蓝图操作,其中任何一个都可以使用自定义代码覆盖。
Sails 中有三种类型的蓝图路由:
-
RESTful 路线,路径始终是
/:model/:id?
。当定义User
模型和控制器时,蓝图以下列方式隐式绑定 RESTful 路由 -'GET /user/:id?': { controller: 'User', action: 'find' }, 'POST /user': { controller: 'User', action: 'create' }, 'PUT /user/:id?': { controller: 'User', action: 'update' }, 'DELETE /user/:id?': { controller: 'User', action: 'destroy' }
这些路由使用 HTTP 谓词来确定即使路由相同也要采取的操作。因此,对
/user
的POST
请求将创建一个新用户,/user/123
的PUT
请求将使用主键 123 更新用户,DELETE
的DELETE
请求将删除主键为 123 的用户。在生产环境中,RESTful 路由应该通常受政策保护,以避免未经授权的访问。 -
快捷方式路径,其中要采取的操作在路径中进行编码。对于我们的用户模型和控制器,Sails 隐式绑定了四个快捷方式路径。
'GET /user/find/:id?': { controller: 'User', action: 'find' }, 'GET /user/create/:id?': { controller: 'User', action: 'create' }, 'GET /user/update/:id?': { controller: 'User', action: 'update' }, 'GET /user/destroy/:id?': { controller: 'User', action: 'destroy' }
例如,
/user/create?name=joe
快捷方式创建一个新用户,而/user/update/1?name=mike
更新用户#1 的名称字段。请注意,这些路由仅响应GET
请求。快捷方式路径非常便于开发,但通常应在生产环境中禁用。它不是为生产而设计的。 -
操作路由,自动为自定义控制器操作创建路由。例如,让
query
成为用户控制器中定义的自定义操作。然后下面的路线将隐含地用于帆 -'GET /user/query/:id?': { controller: 'User', action: 'query' }, 'POST /user/query/:id?': { controller: 'User', action: 'query' }, 'PUT /user/query/:id?': { controller: 'User', action: 'query' }, 'DELETE /user/query/:id?': { controller: 'User', action: 'query' }
如果在
/user/query/:id?
路由中发出请求,那么独立于 HTTP 动词的动作将是相同的。与 RESTful 和快捷方式路由不同,操作路由不要求控制器具有相应的模型文件。这意味着,如果你在/api/controllers/FooController.js
文件中定义了一个控制器但/api/models/Foo.js
文件中没有模型,那么将没有带有/foo
的 RESTful 或快捷路由,但仍然会有可供使用的动作路由。
路线顺序匹配
当请求到来时,风帆将首先匹配明确定义的路线。如果匹配则不再进行进一步匹配并执行相应的动作。但是如果它不匹配,则路由首先匹配蓝图动作路由,如果不匹配则对抗休息路由,如果它不匹配则快捷路由。因此,如果你的/config/routes.js
文件有一些如下的条目 -
'/user/query/:id?': {
controller: 'User',
action: 'find'
}
然后你不能指望 query
行动路线工作。因为与 query
动作路线相同的路线将与明确定义的路线匹配,并且将执行用户控制器的 find
动作。