1、入口
const Koa = require('koa');
const app = new Koa();
require在查找第三方模块时,会查找该模块下package.json文件的main字段,查看koa仓库目录下下package.json文件,可以看到模块暴露的出口是lib目录下的application.js文件


所以,在app.js 中引用koa时,变量Koa就是指向该Application类
2、接着我们会在app上使用use挂载中间件函数和listen监听响应
需要搞清楚的问题有两个:
1、app.use 的作用是挂载中间件,它做了什么?
2、app.listen 的作用是监听端口,它做了哪些工作?

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

Generator+Promise+Co,中间件定义Generator Function。Koa v2版本,异步控制方案支持Async/Await,中间件用普通函数也可以
挂载之后,看下监听listen:

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


4、整体分析过程
