koa2中间件原理及作用

        先跟大家哭一嗓子,自打承担了我司某部门前端负责人,早已不知休息为何物,本来给自己制定的学习计划也都搁浅了,但是,也算是有收获吧,舔人比以前利索多了。

        今天要给各位爷台做的学习汇报是koa2中间件,其实中间件这个概念我之前一直没有很明确的理解,中间件、中间、middleware~是不是就是这样...

        罗伊斯·奥尼尔想要问队友卢比奥今晚咱们那啥不,但是登哥生塞了进来,于是奥尼尔没办法,只能求登哥传话给卢比奥,最后罗伊斯成功的约到了卢比奥,但是登哥这个大嘴巴让火箭队更衣室的全都知道了。(纯属调侃,切勿认真)

        所以,中间件的作用就是,在你上下两个事件通讯的过程中强行塞入一个事件,这个事件可以起到承上启下的作用,并在运行应用的时候做一些只关于部分模块化功能。

                                                                                                        ——某滴高级装逼工程师

        中间件其实并不是koa2的发明,在express中就已经存在了,只不过koa2站在了es7巨人的肩膀上,使用async await让中间件形成了一个饱满的洋葱型。

        在下第一次看洋葱模型的时候好奇,woca这是个什么鬼。拧着眉毛嚎叫了一会儿之后,发现好像看明白了一丢丢,大意就是koa2的中间件可以有好几层吧,在每一次请求与响应的时候,都可以在中间拦截,做登录态管理、状态码管理、错误处理...总之每个中间件都可以做一次拦截来搞事情。嗯!


        下面让我们接触一下亲切的代码吧~

        这是在下自己写的一个中间件的demo:

        输出结果为:

                                        中间件1开始↓

                                        中间件2开始↓

                                        this is end

                                        中间件2结束↓

                                        中间件1结束

        咱们只要接触过一点中间件的概念就一定知道,它的执行规则是由外向内,再由内向外,请参考上文洋葱模型的味道~


        这种功能呢我们是怎么实现的呢,贴下代码您就会发现我靠,真特么简单。PS: 可能本来就不复杂,是在下想的过分了

        首先新建一个类,在实例化的时候新建了一个中间件数组

        写一个use方法,用来收集这些中间件方法push到数组里(其实在js的数据结构中这个叫做队列)

        写一个listen方法,供用户调用,启动node服务器

启动node服务器并且将上下文中的body体返回给浏览器

        listen方法中分别出现了createContext和compose两个方法,createContext负责创建上下文,而compose则将这些中间件和上下文组合起来

返回一个包含req和res的上下文对象
这段就比较厉害了,之所以要用函数柯里化,还是想要实现延时执行,等到middleware全都收集到了,再统一给定ctx参数,上文中执行await fn(ctx)的时候,所有的middleware函数就都被临幸到了,客官您可以自行coding一番

        以上就是这次分享的全部内容,其实这篇博文早就开始计划写了,但是自从来到了支付部门我就成为了支付前端客服1号,生生拉扯了我大部分精力。不过也让我知道了技术建设的重要性,很多重复性的,没有营养的工作我计划今年都把它用技术搞成自动化工程。

        聊点别的吧,现在疫情这么严重,各个公司优化也都在进行着,最近了解到我之前博文提到的小姑娘也找到工作了,而且这次疫情也没能将她淘汰掉,深感欣慰。之前她找工作备受打击我还怕她一蹶不振回老家去了,所以一直也不敢主动问了,哈哈,其实人生还是充满希望的。

你可能感兴趣的:(koa2中间件原理及作用)