koa2中间件机制-洋葱圈模型


一、什么是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

查看命令行工具打印输出

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM