全栈项目|小书架|服务器开发-Koa2中间件机制洋葱模型了解一下

KOA2

是什么?

Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 经过利用 async函数,Koa帮你丢弃回调函数,并有力地加强错误处理。 Koa 并无捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。css

为何产生?

笔者对这几个框架都不熟,这里就不误人子弟了。能够看看下面一些大佬的介绍。html

Koa是由Express的原班人马打造,那么他们为何不将Express升级版本呢而是重新开发新的一个项目?看官方的介绍:Koa 与 Expressnode

中间件

中间件(英语:Middleware),又译中间件、中介层,是提供系统软件和应用软件之间链接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务、面向服务的体系结构等中应用比较普遍。中间件-维基百科git

中间件只是一种服务,没有这种服务系统也可以存在。好比:一台台式机,是由不少个部件组装而成。鼠标、键盘等只是为了让系统更加完善。即便没有鼠标或者键盘,台式机也可使用其余硬件软件来操做电脑。或者查看 AOP 面向切面编程 中的比喻。github

很是有用的Koa中间件合集web

Koa是一个中间件框架,能够采用两种不一样的方法来实现中间件:express

  • async function
  • common function

如下是使用两种不一样方法实现一个日志中间件的示例:编程

中间件一般带有两个参数(ctx, next), ctx是一个请求的上下文(context), next是调用执行下游中间件的函数. 在代码执行完成后经过 then 方法返回一个 Promise。关于Promise介绍能够查看这篇文章: Promise原理讲解 && 实现一个Promise对象 (遵循Promise/A+规范)设计模式

async functions (node v7.6+)浏览器

app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
复制代码

Common function

app.use((ctx, next) => {
  const start = Date.now();
  return next().then(() => {
    const ms = Date.now() - start;
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
  });
});
复制代码

Koa 的中间件机制使用的是洋葱模型,而什么是洋葱模型呢?

洋葱模型

经过 next() 把多个中间件串联执行的效果。全部的中间件都会执行两边,就像洋葱同样,从洋葱的一侧进入就会从另外一侧出去。

洋葱圈模型图示1来源

洋葱模型图示1
就是从请求到响应的过程全部的中间件都会走两遍。看不太清楚的能够看图示2。 洋葱圈模型图示2 来源
洋葱模型图示2
经过图示可能还不是很清楚 Koa洋葱模型的执行过程,下面来看一个 简单例子:

const Koa = require('koa');

const app = new Koa();

// 中间件1
app.use(async (ctx, next)=>{
    console.log(1)
    next()
    console.log(11)
});
// 中间件2
app.use(async (ctx, next) => {
    console.log(2)
    next()
    console.log(22)
})

// 中间件3
app.use(async (ctx, next) => {
    console.log(3)
    next()
    console.log(33)
})

app.listen('3000');
console.log(`http://localhost:3000`);
复制代码

在浏览器输入http://localhost:3000回车以后的输出结果:

http://localhost:3000
1
2 
3 
33
22
11

复制代码

经过结果能够看出执行过程和洋葱模型是一致的。

参考


咨询请加微信:轻撩便可。

在这里插入图片描述
相关文章
相关标签/搜索