Router和Interceptor配置
业务逻辑和数据的处理主要靠router和interceptor配置来实现。interceptor比router优先执行,因此interceptor可以处理一些公共逻辑。
配置目录
router配置目录在routerDir,interceptor配置目录在interceptorDir. 可在目录中写多个js文件,每个js文件导出一个配置对象,一个配置对象可以有多个router或interceptor配置。maty框架将自动加载并处理。
配置项目
router和interceptor的配置项大多数是一致的,不一样的地方会特别说明。
'/route/:type, /route, /route/hello/world'
route地址,可以设置为一个或英文逗号分隔的多个地址,服务正常启动后,该地址可以被访问。
当访问 /route/hello, /route,/router/hello/world三个不同的地址时,都将返回 view配置的 router/list 页面。:type是参数占位符,访问 /router/hello 时,ctx.param.type = hello
更多配置规则可以参考maty所使用的解析库文档:path-to-regexp。
假如配置了两个路由地址分别为: /route/:type 和 /route/hi, 是不会产生冲突的,请求地址将优先匹配 无参路由/route/hi,其次才去匹配 带参路由 /route/:type。
interceptor配置规则相同,但一般拦截无参路由或使用通配符。
interceptor不会产生路由参数。其参数来自于匹配的路由。
例如配置为 /route/(.*) ,拦截/route开头的所有请求。
method
可选项,类型String。
配置路由地址的请求方式,默认是 get 请求。可以配置为逗号间隔的多个请求方式。当遇到请求该路由地址时返回405错误,则需要检查method配置是否正确。
interceptor不支持该项配置,interceptor针对所有的请求方式。
api
可选项,类型String|Object|Array|Function。
配置获取数据的后端api接口地址。可以是带域名的绝对地址,也可以是相对地址,然后用handleAPI配置来处理。
api地址可使用前缀post: get: put: delete: 来指定该api的请求方式,否则默认ctx.method请求方式。
api地址一般为Sting的字符串,但也可以是Object类型。只有object类型的配置项支持配置数据名name,可用于多个api配置存在的命名冲突。object支持配置项如下:
当api配置为Array类型,array item可以是上述的String或Object类型,也可以是一个函数Function,该函数执行完返回字符串地址或配置对象。
当api为Function配置类型,接收参数为ctx,可以返回String或Array类型的配置。若返回空,则不做接口请求。示例如下:
api配置相对灵活,更多参见项目实践:api的组合配置
cache
可选,类型Boolean|Number|Function。
是否缓存api返回的数据。默认false表示不缓存,true表示永久缓存。
当值类型为Number,表示缓存时间的毫秒数。
当为Function时,接收ctx为参数,返回Boolean或Number。
timeout
可选,类型Number。
api请求的超时时间,为防止请求卡死在api无响应时。单位毫秒ms。
interceptor无此配置项。
series
可选,类型Boolean,默认false。
当router或interceptor配置了多个api地址,series决定了这么多api是并行请求还是串行请求。同时可以单独配置某个api是串行请求,而其他api是并行请求。串行请求的api结果,可以在并且请求api的handle方法中通过ctx.apiData来获取。
所以,若有api数据的依赖,可以设置series为true。
proxy
可选,类型String|Function。
转发请求,可以设置为一个api字符串地址(和上面的api配置项为字符串类型时的规则相同),或一个返回api字符串地址的函数,ctx作为参数传入该函数。
该配置具备排他性,设置了proxy值,则其他配置项均无效。
当不需要处理api数据时,可以使用该配置项,例如转发一个验证码图片地址,或下载文件等。api的响应内容和响应头都会原样转发到浏览器端。
interceptor无此配置。
pageCache
可选,类型Boolean,默认false.
设置为true时,将在响应头上加上禁止缓存。
interceptor无此配置。
query(ctx)
可选,类型Function。
需要定制传递给api的get参数时,可以在该配置中处理并返回一个query对象。
body(ctx)
可选,类型Function。
需要定制传递给api的post/put参数时,可以在该配置中处理并返回一个body对象。
handle(data, ctx)
可选,类型Function
用于处理api返回的数据。第一个参数data是一个或多个api地址返回数据的集合。本质是ctx.apiData的引用.
data的keys由api为object类型的name配置项优先决定,无name配置项时,由apiDataName()获取。
若api配置项为Array类型,且array item中配置了handle项,则handle项的data参数是api接口返回的原数据结果,而不是ctx.apiData的引用.
interceptor的handle只有在api为string类型值时有效
view
可选,类型String|Function,默认值为ctx.path
设置模板文件的地址,是相对于viewDir的相对地址。若使用默认引擎,则还可以省略后缀,否则不可以省略后缀。比如 $viewDir/main/list.njk 模板文件,可以设置view: 'main/list' 。
当为Function类型时,接收ctx为参数,返回一个模板地址。
interceptor无此配置。
Last updated
Was this helpful?