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();
}
..........................................................................................................................................