1、什么是Koa的中间件:node
通俗的讲:中间件就是匹配路由以前或者匹配路由完成作的一系列的操做,咱们就能够把它叫作中间件。web
在express中间件(Middleware) 是一个函数,它能够访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,通常被命名为 next 的变量。在Koa中中间件和express有点相似。
中间件的功能包括:
执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件。
若是个人get、post回调函数中,没有next参数,那么就匹配上第一个路由,就不会往下匹配了。若是想往下匹配的话,那么须要写next()
2、Koa应用可以使用以下几种中间件:
应用级中间件
路由级中间件
错误处理中间件
第三方中间件express
3、Koa中间件的执行顺序:
Koa 的中间件和 Express 不一样,Koa 选择了洋葱圈模型。npm
洋葱圈模型:浏览器
代码演示:app
经过命令行工具输入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.jsasync
// 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
查看命令行工具打印输出