koa2洋葱模型

2020-05-15  本文已影响0人  喜剧之王爱创作

写在前面

我们已经知道koa2中间件是基于async/await实现的,其执行过程是通过next来驱动的,于是,koa2就有了一个特殊的执行顺序,我们为这种执行顺序设定了一个模型叫--洋葱模型。

1.png 2.png

什么是洋葱模型

现在假想,你手里有一支牙签,横向穿过一个洋葱,是不是会层层穿透?从第一层进去、到第二层、第三次...然后到中间层后,再层层穿透的出,从第三层出、第二层、第一层...。其实我们的koa2中间件执行顺序也是这样的。抛开业务代码,用koa2官网的一个例子做实验

const Koa = require('koa');
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);

我们执行一下上面代码。会发现打印结果是

第一层洋葱 - 开始
第二层洋葱 - 开始
第三层洋葱 - 开始
第三层洋葱 - 结束
第二层洋葱 - 结束
第一层洋葱 - 结束

这就是洋葱模型,一个执行顺序。

这里只是我在学习过程中的一个总结,详细的洋葱模型这里推荐一片https://segmentfault.com/a/1190000013981513

写在最后

洋葱模型是koa2很重要的一个中间件执行顺序模型,理解他对理解koa2的中间件机制有很大帮助

上一篇下一篇

猜你喜欢

热点阅读