摘要:用法回顾执行顺序每当执行时,执行下一个中间件,执行到最后一个中间件后开始往回执行源码解析源码执行步骤使用方法即将进中的数组中方法调用的和方法来创建服务,的回掉执行下面的操作回掉首先执行方法将组合成一个对象来执行,这个对象即可完成中
用法回顾
const Koa = require("koa"); const app = new Koa(); app.use(async (ctx, next) => { fn1(); await next(); fn2(); }); app.use(async (ctx, next) => { fn3(); await next(); fn4() }); app.use(async (ctx, next) => { fn5(); await next(); fn6() }); app.listen(3000);
执行顺序 fn1 -> fn3 -> fn5 -> fn6 -> fn4 -> fn2
每当执行next时,执行下一个中间件,执行到最后一个中间件后开始往回执行
使用use方法即将middleware push 进koa中的this.middleware数组中
listen方法调用node的http.createServer和server.listen方法来创建服务,createServer的回掉执行下面的操作
回掉首先执行compose(this.middleware)方法将middleware组合成一个promise对象来执行,这个promise对象即可完成中间件级联的操作
将回掉传出的值req和res用于创建一个context对象,里面包含了request对象和response对象,这些对象提供了许多后台开发需要的参数和方法
执行中间件
得到结果给respond方法格式化数据
或者捕获异常给onerror方法处理异常
composekoa源码最重要的部分,如何实现中间件级联,以下是compose方法的源码(为方便观看,部分进行了ES6处理)
function compose (middleware) { if (!Array.isArray(middleware)) throw new TypeError("Middleware stack must be an array!") for (const fn of middleware) { if (typeof fn !== "function") throw new TypeError("Middleware must be composed of functions!") } return function (context, next) { // last called middleware # let index = -1 return dispatch(0) function dispatch (i) { if (i <= index) return Promise.reject(new Error("next() called multiple times")) index = i let fn = middleware[i] if (i === middleware.length) fn = next // next = undefined if (!fn) return Promise.resolve() // 当运行到最后一个middleware时结束 try { return Promise.resolve( fn(context, next = () => dispatch(i + 1)) ) } catch (err) { return Promise.reject(err) } } } }
compose方法使用递归的方式遍历每一个middleware
遍历时将下一个middleware当作next传递给当前的middleware
更多文章 yjy5264.github.io文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94172.html
摘要:中异步处理在中使用的是,在中使用的是,我们本次采用来处理异步。函数参数为的数组,数组成员是通过方法添加的中间件。小结从最开始的编写中间件,到现在阅读函数源码,中间件机制并不复杂,了解之后,我们可以运用编写更合适的中间件,构建自己的应用。 上一篇讲了如何编写属于自己的 Koa 中间件,本篇将根据原理实现一个简单的中间件处理函数,并对 Koa 中间件处理函数 compose 函数进行源码解...
摘要:实现的四大模块上文简述了源码的大体框架结构,接下来我们来实现一个的框架,笔者认为理解和实现一个框架需要实现四个大模块,分别是封装创建类构造函数构造对象中间件机制和剥洋葱模型的实现错误捕获和错误处理下面我们就逐一分析和实现。 什么是koa框架? koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度...
摘要:实现的四大模块上文简述了源码的大体框架结构,接下来我们来实现一个的框架,笔者认为理解和实现一个框架需要实现四个大模块,分别是封装创建类构造函数构造对象中间件机制和剥洋葱模型的实现错误捕获和错误处理下面我们就逐一分析和实现。 什么是koa框架? koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度...
阅读 3834·2021-07-28 18:10
阅读 2512·2019-08-30 15:44
阅读 1032·2019-08-30 14:07
阅读 3406·2019-08-29 17:20
阅读 1545·2019-08-26 18:35
阅读 3484·2019-08-26 13:42
阅读 1769·2019-08-26 11:58
阅读 1534·2019-08-23 18:33