这份Koa的简易Router手敲指南请收下

 上一期链接——也就是本文的基础,参考KOA,5步手写一款粗糙的web框架

本文参考仓库:点我

Router其实就是路径匹配,通过匹配路径,返回给用户相应的网站内容。

以下方例子为例,主要通过提取req中的path信息,来匹配当前路径,并给ctx.body赋值,返回相应的界面。这个过程不复杂,就是一个匹配路径的过程。但是这种会不会太臃肿了呢,而且很有可能路径一多,就要被if...else...给弄晕了。

app.use((ctx,next)=>{    //简易路由    let {path}=ctx    if(path==="/"){        ctx.body="index"    }else if(path==="/admin"){         ctx.body="admin"    }else if(path==="/user"){         ctx.body="user"    } })

这个时候专门处理路径的插件就出现了,写一个Router,专门用来管理路径。

Router的功能一共是两个:

  • 匹配路径
  • 返回相应页面

如果Router要挂载到app上,那么语法是这样的app.use(router.routes()),也就是说:

  • Router本身就是个中间件
  • 为了返回匹配的路由,写一个中间件挂到app

了解了Router的大概,我们开始一步步动手写Router吧!

STEP1 创建Router

先把Router的框架写好,一个构造器,一个get方法用于配置路由,一个routers变成路由匹配的中间件挂在到app上。

class Router{     constructor(){}     get(path,callback){}     routers(){} }

我们获取路由的时候,一定会配置页面,那么这个页面的类也要加上了,每次get的时候,就加入一个页面到数组中。

class Page{     constructor(path,callback){         this.path=path         this.callback=callback     } } class Router{     constructor(){         this.pages=[]     }     get(path,callback){         this.pages.push(new Page(path,callback))     }     routers(){} }

因为路由是对中间件的封装,所以用法上是和app.use类似的:

router.get(path,(ctx,next){     ctx.body='xxx'     next() })

是不是很眼熟?这个get中的callback参数就是中间件。

关键字:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信