什么叫中间件
在Koa中,中间件是指连贯整个 Koa 应用程序,并共享资源(上下文)的独立插件。
这里注意两个词:连贯与共享资源
- 连贯 对应“next”
- 共享资源 对应"context”。
如图,是一个基本的web服务器的模型,服务器接受一个浏览器的request请求,然后返回一个response,一个个小箭头指的就是中间件。为什么要画成洋葱这么一个形态,是因为不管是接收请求还是返回结果,都要经过中间件,所以中间件是一个环形的,只不过,进去和出来的过程经过的中间件顺序是相反的。
中间件的执行顺序
如图,我们自定义三个中间件,每个中间件都在进入和离开的时候输出一串代码。
其中每个中间件的代码如下:
function m1(ctx,next){
// console.log('m1',ctx.path);
}
module.exports = function(){
return async function(ctx,next){
console.log('m1 start')
m1(ctx)
await next();
console.log('m1 end')
}
}
m1,m2,m3中间件的主要区别在于console.log(m2 start)
,console.log('m2 end')
。
我们按照如下顺序在app.js引入并使用3个中间件:
刷新页面,我们可以在命令行中看到如下输出:
可以看出,中间件的执行顺序是标准的堆栈(先进后出)模型。
中间件的执行顺序和中间件的引用顺序没有关系,和app.use()
的顺序有关