You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
routerOptions new KoaRouter时候传入的参数,具体可以看koa-router
这个包执行之后会返回经过koaCompose包装后的中间件,以供koa实例添加。
参数适配
assert(Array.isArray(routes)||typeofroutes==='string','routes must be an Array or a String')assert(fs.existsSync(controllerDir),'controllerDir must be a file directory')if(typeofroutes==='string'){routes=routes.replace('.js','')if(fs.existsSync(`${routes}.js`)||fs.existsSync(routes)){// 处理传入的是文件if(fs.existsSync(`${routes}.js`)){routes=require(routes)// 处理传入的目录 }elseif(fs.existsSync(routes)){// 读取目录中的各个文件并合并routes=fs.readdirSync(routes).reduce((result,fileName)=>{returnresult.concat(require(nodePath.join(routes,fileName)))},[])}}else{// routes如果是字符串则必须是一个文件或者目录的路径thrownewError('routes is not a file or a directory')}}
前言
原文地址
源码地址
从背景出发
现在我们需要实现这样一个需求:
/fe
的时候,页面展示hello fe/backend
的时候,页面展示hello backend你是不是在想,这需求俺根本不用
koa
、koa-router
,原生的node模块就可以搞定。确实是,对于很简单的需求,用上框架似乎有点浪费,但是对于以上的实现,也有缺点存在,比如
所以接下来我们来试试用
koa
和koa-router
怎么实现app.js
通过上面的处理,路径的解析倒是给
koa-router
处理了,但是整体的写法还是有些问题。接下来我们再优化一下,先看一下整体的目录结构
预览一下每个文件的逻辑
app.js
应用的路口routes/index.js
路由配置中心controller/hello.js
hello 模块的逻辑middleware/index.js
中间件统一注册写到这里你可能心里有个疑问?
一个简单的需求,被这么一搞看起来复杂了太多,有必要这样么?
答案是:有必要,这样的目录结构或许不是最合理的,但是路由、控制器、view层等各司其职,各在其位。对于以后的扩展有很大的帮助。
不知道大家有没有注意到路由配置这个地方
routes/index.js
路由配置中心每个路由对应一个控制器去处理,很分离,很常见啊!!!这似乎也是我们平时在前端写vue-router或者react-router的常见配置模式。
但是当模块多起来的来时候,这个文件夹就会变成
有没有什么办法,可以让我们不用手动引入一个个控制器,再手动的调用koa-router的get post等方法去注册呢?
比如我们只需要做以下配置,就可以完成上面手动配置的功能。
routes/a.js
routes/c.js
然后使用
pure-koa-router
这个模块进行简单的配置就ok了这样整个过程我们的关注点都放在路由配置上去,再也不用去手动
require
一堆的文件了。简单介绍一下上面的配置
path: 路径配置,可以是字符串
/c/b
,也可以是数组[ '/c/b' ]
,当然也可以是正则表达式/\c\b/
methods: 指定请求的类型,可以是字符串
get
或者数组[ 'get', 'post' ]
,默认是get
方法,controller: 匹配到路由的逻辑处理方法,
c.b
表示controllerDir
目录下的c
文件导出的b
方法,a.b.c
表示controllerDir
目录下的/a/b
路径下的b文件导出的c方法源码实现
可以点击查看源码
整体结构
pure-koa-router
接收routes
controllerDir
、控制器的根目录routerOptions
new KoaRouter时候传入的参数,具体可以看koa-router这个包执行之后会返回经过
koaCompose
包装后的中间件,以供koa实例添加。参数适配
路由注册
routes内容预览
主动注册
源码的实现过程基本就到这里了。
结尾
原文地址
源码地址
The text was updated successfully, but these errors were encountered: