菜鸟第一步 koa原理

本文探讨了Koa框架产生的原因及其相对于Express的轻量特性。重点解析了Koa如何封装req和res为ctx,以及实现中间件功能的原理。通过createContext方法挂载request和response,使用delegate方法进行数据劫持。Koa的中间件通过use方法保存,compose函数实现了洋葱模型的调用顺序。最后,文章提及了async和await的原理作为后续学习目标。
摘要由CSDN通过智能技术生成

学习体会

要想看源码首先需要明白几点
1、为什么这个东西要出来、有什么作用和好处
2、这个东西怎么用
3、接下来才到他的原理解读
真希望在重复这个过程的时候会得到启发,从而做出真正属于自己的东西。

1、koa为什么会出来

一、如果直接使用node来进行服务端处理会显得非常麻烦、所以才有了express和koa等框架。所谓的框架无非就是对原有的api进行了进一步的封装,使得功能更加好用和完善。其次,在设计的时候还需要保证框架可以很好的扩展生态,也就是可以附加额外的功能,在koa中体现就是中间件。
二、koa相比express更加轻量,几乎所有的额外功能都需要中间件来扩展、需要什么引入什么就好了,所以体积更小。

2、koa原理

koa其实很简单、主要做了两件事情,1、将res和req封装到ctx中,2、实现中间件。
在源码中共有四个文件,application、context、request和response。application是主文件、暴露koa类。

1、ctx的实现

一、ctx的实现

koa实现了两个类扩充了原生req和res,request和response。

拿一个 取请求头数据的简单例子

首先通过application中的createContext方法将req和res方法挂载到request和response上

    createContext(req, res) {
   
        const context = Object.create(this.context) //对于每次请求  都要保证ctx相互独立 以下类似
        const request = context.request = Object.create(this.request)
        const response = context.response = Object.create(this.response)
        context.app = request.app = response.app = this
        context.req = request.req = response.req = req  //挂载req
        context.res = request.res = response.res = res//挂载res
        request.ctx = response.ctx = context
        request.response = response
        response.request = request
        context.originalUrl = request.originalUrl = req.url
        context.state = {
   }
        return context
    }

随后通过挂载在上面的req对其进行封装,从req.headers=>request.headers
问题?为什么要创建一个request,而不直接加在ctx上呢?
我认为主要原因是降低代码的耦合性,从而可以更好的维护。

module.exports = {
   
    get header() {
   
        return this.req.headers
    },
    set header(val) {
   
        this.req.headers = val
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值