koa的中间件

2018-09-17  本文已影响35人  likely

什么是koa?

由 Express 原班人马打造的 koa,致力于成为一个更小、更健壮、更富有表现力的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率。Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。

什么是中间件?

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。

如图

koa的中间件模型?

如图

koa的中间件采用的是洋葱模型,每一次对于程序的访问,都会从外向内依次经过每一个中间件,再依次由内向外。

如何手写一个中间件?

下面实现一个用户记录用户访问记录,服务返回时间的中间件为例。

const koa = require('koa')
const app = new koa()
const port = 3000

// middleware1 - logger
app.use(async (ctx, next) => {
    console.log(1)
  await next()
  console.log(2)
  const rt = ctx.response.get('X-Response-Time')
  logger.info(`${ctx.method} ${ctx.url} - ${rt}`)
})

// middleware2 - x-response-time
app.use(async (ctx, next) => {
    console.log(3)
  const start = Date.now()
  await next()
  console.log(4)
  const ms = Date.now() - start
  ctx.set('X-Response-Time', `${ms}ms`)
})

app.use(ctx => {
    console.log(5)
    ctx.body = 'hello world!'
})

app.listen(port, () => {
    console.log(`server start success at port ${port}`)
})

await next 意思就是跳过当前的程序执行下一个中间件, 所以当用户访问该程序时打出的日志就是1-3-5-4-2

上一篇 下一篇

猜你喜欢

热点阅读