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