路由
Router主要是用来描述请求URL与具体承担执行动作的Controller的映射关系。
框架采用了自动映射的关系,无需配置文件来定义具体路由的指向。
路由与Controller如何映射
Controller文件必须存放在功能模块的controller目录下,支持多级目录,访问时通过相应的目录层级即可。
如:
user/controller/login.js
Module: user, Controller: login, Action: index => GET /user/login
路由配置
在模块配置文件中,添加routes字段,如
module.exports = {
routes: {
defaultRoute: 'blog/post'
}
}
单模块模式路由设置
prefix: string: 路由前缀defaultRoute: string: 设置默认路由,/${controller}(/${action})?,action未设置时,默认为indexdefaultMethods: string|string[]: 默认注册的HTTP Methods,默认为GETload: string[]: Controller加载顺序,可指定加载模块哪些控制器以及相应的路由注册顺序replaceIndex: boolean: 是否保留路由中index,如index.js控制器,如保留,则路由为 /index/${action},否则为/${action},默认为true,即不保留indexignoreValidateResponses: 忽略响应数据校验,默认为false,表示不忽略,会校验响应数据
多模块模式路由配置
公共模块路由配置
prefix: string: 路由前缀defaultRoute: string: 设置默认路由,/${module}/${controller}(/${action})?,action未设置时,默认为indexdefaultMethods: string|string[]: 默认注册的HTTP Methods,默认为GETload: string[]: Controller加载顺序,可指定加载模块哪些控制器以及相应的路由注册顺序replaceIndex: boolean: 是否保留路由中index,如index.js控制器,如保留,则路由为 /index/${action},否则为/${action},默认为true,即不保留indexignoreValidateResponses: 忽略响应数据校验,默认为false,表示不忽略,会校验响应数据
功能模块路由设置
prefix: string: 路由前缀alias: string: 模块路由别名,如user模块alias: person,路由会重命名为/person/${controller}/${action}defaultRoute: string: 设置默认路由,/${controller}(/${action})?,action未设置时,默认为indexdefaultMethods: string|string[]: 默认注册的HTTP Methods,默认为GETload: string[]: Controller加载顺序,可指定加载模块哪些控制器以及相应的路由注册顺序ignoreValidateResponses: 忽略响应数据校验,默认为false,表示不忽略,会校验响应数据
路由匹配顺序
在URL可以匹配多个路由的情况下,路由的选择默认是由对应actionXXX方法在controller中注册的先后顺序决定,与behavior或controller中Routes中配置顺序无关。使用load配置可以覆盖默认行为。
路由注册路径
在框架启动时,会生成 /runtime/router/definitions.json,该文件包含了注册的所有路由,可以根据该文件来排查一些问题。
