Koa-Router 源码解析
Talk is cheap, show me the code
koa-router
打开源码目录,就涉及两个重要文件,layer.js和router.js,分别对应Router和Layer对象
Layer对象是对单个路由的管理,其中包含的信息有路由路径(path)、路由请求方法(method)和路由执行函数(middleware),并且提供路由的验证以及params参数解析的方法。
Router对象则是对所有注册路由的统一处理,并且它的API是面向开发者的。
分析koa-router的实现原理可以从以下几个方面入手:
- Layer对象的实现
- 路由注册
- 路由匹配
- 路由执行流程
Layer
Layer对象主要管理单个路由,是每个路由的最新处理单元。
先看一下Layer对象声明的源码。
|
|
以上构造函数,用来初始化路由路径,路由请求方法数组,路由处理函数数组,路由正则表达式以及params参数信息。
其中path-to-regexp方法根据路径字符串生成正则表达式,可以实现路由的匹配以及params参数的捕获。
- 验证路由
|
|
- safeDecodeURIComponent
decodeURIComponent只能转义encodeURIComponent编码过的方法,如果编码不符合要求,decodeURIComponent则会抛出URIError,所以koa-router中做了安全处理
|
|
- param
|
|
- 设置路由路径的前缀
|
|
- URL生成
|
|