koa和express比较 以及 koa源码解读

koa 使用的是async await等待 经典句型:await next();类似堆栈先进后出

    参数(ctx, next)

    

express 是逐步流下去的,走到最后都不匹配,资源返回404,xhr返回500

    参数(req, res, next)

 

 

源码解读:待补充

http.createServer(app.callback()).listen(...)

new Koa()时候自动执行了constructor,callback 方法,返回的handleRequest是function handleRequest(req, res){ ... }

npm源码涉及模块

..........................................................................................................................................

koa-compose模块 作用:返回一个Promise连续调用的function(待后期使用)

关键点 function dispatch(i) 当未到达最后时递归调用 return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));

很多代码中return function出去,是为了保存上一次传进来的参数,备用

..........................................................................................................................................

delegates模块,作用:事件委托,有以下5个方法,

    method, access, getter, setter, fluent  分别push到对应数组,

    this.methods = [];

    this.getters = [];

    this.setters = [];

    this.fluents = [];

proto.__defineGetter__() 

proto.__defineSetter__() 

koa文件夹的lib/context.js中进行事件委托,返回this对象

..........................................................................................................................................    

on-finished中依赖的ee-first模块 作用:通过它我们可以在监听一系列事件时, 得知哪一个事件最先发生并进行相应的操作

源码内定义 eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)

res若是websoket, 便改写eeSocket = first([[socket, 'error', 'close']], onFinish)

..........................................................................................................................................

on-finished模块  在文中的作用:对请求的处理

koa中handleRequest方法执行了 onFinished(res, onerror); 其中res,onerror便是对应的参数msg和onFinish

createListener方法中,返回的listener虽然是个方法,但也可以在上面继续追加属性

..........................................................................................................................................    

statuses模块

定义了一系列状态码,返回Boolean

           文中function respond() { }中对ctx状态码的判断,写入res.end()

if (statuses.empty[code]) {

    ctx.body = null;

    return res.end();

}

..........................................................................................................................................    

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值