koa源码解读

1、入口

const Koa = require('koa');

const app = new Koa();

require在查找第三方模块时,会查找该模块下package.json文件的main字段,查看koa仓库目录下下package.json文件,可以看到模块暴露的出口是lib目录下的application.js文件

1.1 application.js

进入lib/appplication.js文件是向外导出了创建class实例的构造函数,它继承了events,这样就会赋予框架事件监听和事件触发的能力

1.2 application

所以,在app.js 中引用koa时,变量Koa就是指向该Application类

2、接着我们会在app上使用use挂载中间件函数和listen监听响应

需要搞清楚的问题有两个:

app.use 的作用是挂载中间件,它做了什么?

app.listen 的作用是监听端口,它做了哪些工作?

1.3 use方法

在use方法中,首先判断穿参是否为函数,否则抛出错误;判断是否为generator函数,给出log表示generator 用法已被弃用,并且通过convert函数进行转换处理

找到convert函数,如下

1.4 convert

在Koa的v1版本和v0版本,异步控制方案是Generator+Promise+Co,中间件定义Generator Function。Koa v2版本,异步控制方案支持Async/Await,中间件用普通函数也可以

挂载之后,看下监听listen:

1.5 listen

3、中间件执行const fn = compose(this.middleware);

1.6 fn

compose小可爱出现了...

1.7 compose

4、整体分析过程

1.8 all
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。