koa中间件原理篇

在这里插入图片描述

事先准备
1、初始化项目 npm init 

2、安装依赖 cnpm install -g koa-generator 

3、进入项目并安装依赖  cd koaProject & cnpm i 

注意这里用的淘宝的镜像源
koa中间件的实现原理及代码演示

实现原理

初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存储中间件,

use调用顺序会决定中间件的执行顺序。每个中间件都是一个函数(不是函数的话会直接报错),

接收两个参数,第一个是ctx上下文对象,另一个是next函数

在建立好http服务器后,会调用koa-compose模块对middleware中间件数组进行处理。

具体原理就是:会从middleware数组中取第一个函数开始执行,

中间件函数中调用next方法就会去取下一个中间件函数继续执行。

每个中间件函数执行完毕后都会返回一个promise对象。调用next方法并不是表示当前中间件函数执行结束了,

而是执行下一个中间件,调用next之后仍可以继续执行其他代码

代码演示

const middleware1 = async function(ctx, next) {
    
    
    console.log(1)
    await next()
    console.log(6)
}

const middleware2 = async function(ctx, next) {
    
    
    console.log(2)
    await next()
    console.log(5)
}

const middleware3 = async function(ctx, next) {
    
    
    console.log(3)
    await next()
    console.log(4)
}

依次打印出 1 => 2  => 3 => 4 => 5 => 6 

在命令行观察中间件执行顺序。执行结果自然是 1 => 2  => 3 => 4 => 5 => 6 

三个函数看做是三个中间件,第一个函数调用next时就会执行第二个中间件函数。

中间件函数队列,会在最后一个中间件或一个没有调用next的中间件那里停止。

就比如第一个中间件没有调用next,那么后续的中间件函数都不会执行。

总结
在这里插入图片描述

中间件执行就像洋葱一样,最早use的中间件,就放在最外层。

处理顺序从左到右,左边接收一个request,右边输出返回response。

koa官方文档上把外层的中间件称为"上游",内层的中间件为"下游"。

一般的中间件都会执行两次,调用next之前为第一次,

调用next时把控制传递给下游的下一个中间件。当下游不再有中间件或者没有执行next函数时,

就将依次恢复上游中间件的行为,让上游中间件执行next之后的代码

谢谢观看,如有不足,敬请指教

猜你喜欢

转载自blog.csdn.net/handsomezhanghui/article/details/108082697