一、什么是Koa的中间件:
通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以把它叫做中间件。
在express中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一般被命名为 next 的变量。在Koa中中间件和express有点类似。
中间件的功能包括:
执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件。
如果我的get、post回调函数中,没有next参数,那么就匹配上第一个路由,就不会往下匹配了。如果想往下匹配的话,那么需要写next()
二、Koa应用可使用如下几种中间件:
应用级中间件
路由级中间件
错误处理中间件
第三方中间件
三、Koa中间件的执行顺序:
Koa 的中间件和 Express 不同,Koa 选择了洋葱圈模型。
洋葱圈模型:
代码演示:
通过命令行工具输入
mkdir koa2-middleWare // 新建名为koa2-middleWare的文件夹 cd koa2-middleWare // 访问该文件夹 npm init -y // 初始化npm npm i koa2 -S // 安装koa2
mkdir app.js // 新建名为app的js文件
在koa2-middleWare文件夹中编辑app.js
// app.js const Koa = require('koa2'); const app = new Koa(); // logger app.use(async (ctx, next) => { console.log('第一层洋葱 - 开始') await next(); const rt = ctx.response.get('X-Response-Time'); console.log(`${ctx.method} ${ctx.url} - ${rt}`); console.log('第一层洋葱 - 结束') }); // x-response-time app.use(async (ctx, next) => { console.log('第二层洋葱 - 开始') const start = Date.now(); await next(); const ms = Date.now() - start; ctx.set('X-Response-Time', `${ms}ms`); console.log('第二层洋葱 - 结束') }); // response app.use(async ctx => { console.log('第三层洋葱 - 开始') ctx.body = 'Hello World'; console.log('第三层洋葱 - 结束') }); app.listen(8000);
通过命令行工具输入
node app.js // 启动服务
最终目录结构如下
打开浏览器访问:localhost:8000
查看命令行工具打印输出