Koa2 源码阅读

Koa2.x 源码阅读顺序

您可以在我的github上clone一下源码。地址戳这(https://github.com/yaoqifa/LearningKoa2.x)
记得给个star

首先看koa目录下的Readme, 了解koa的基本用法,再花几分钟时间通读下History.md对koa的历史有个基本了解。
下面进入正题。

入口是 koa/lib 下的application.js这个文件。这个文件里我做了详细的注释。先看module.export,导出的就是一个Class Application,
Application继承了Emitter, 使用时就是new 它,得到一个koa实例,它能做到的事: 传入中间件,监听端口生成一个服务器实例,然后能拿到http请求,请求逐层的经过middleware数组,经过后的结果
交给handleRespose处理响应,response 里就是具体返回内容。
阅读Application的过程就是:找到module.export, 看到constructor,进入listen方法,发现

const server = http.createServer(this.callback());

这行代码相当于

http.createServer(function (req, res) {
  res.send()
})

所以跟进callback方法查看做了什么,

 callback() {
    const fn = compose(this.middleware);

    if (!this.listeners('error').length) this.on('error', this.onerror);

    const handleRequest = (req, res) => {
      const ctx = this.createContext(req, res);
      return this.handleRequest(ctx, fn);
    };

    return handleRequest;
  }

首先应用了compose方法,该方法的作用就是执行中间件的函数数组里每一项都是函数,递归执行每个函数,前一个函数的结果作为后一个函数的输出。
compose代码很巧妙,一个尾递归,将所有中间件串起来,具体可查看koa-compose。
继续… 上面的错误处理代码可以不看,重点是handleRequest方法,正是callback返回的东西,所以该方法相当于http.createServer里那个回调,handleRequest 里根据createContext方法创建一个ctx,ctx就是执行上下文,通过它能设置和修改req、res、cookies等。下面分析createContext方法的源码。

createContext(req, res) {
  const context = Object.create(this.context);
  con
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值