Skip to main content

中间件

中间件

koa2 和 express 中间件模型的区别

Koa 的中间件采用了洋葱圈模型,所有的请求在经过中间件的时候都会执行两次,能够非常方便的执行一些后置处理逻辑。例如我们经常需要计算一个请求的响应时间,在 Koa 中, 我们可以在中间件的开始记录初始时间,当响应返回时,代码执行又回到了原来的中间件,此时根据当前时间和初始时间的时间差便得到了响应时间

function responseTime() {
return async function responseTime(ctx, next) {
const start = Date.now()
await next() // wait for other middleware to run
const delta = Math.ceil(Date.now() - start)
ctx.set('X-Response-Time', delta + 'ms')
})
}}

而 express 中间件属于线性执行。更大的区别在于响应时机,express 的 res.end 会立即响应,而 koa2 需要等所有中间件执行完毕才会响应。更多对比参考

常用中间件

  • koa-router
  • koa-bodyparser 解析请求体
    • koa-body 解析 form-data 的请求体
  • koa-cors 处理跨域
  • koa-views 支持视图模板渲染
  • koa-static 静态文件托管
  • koa-session
  • koa-jwt
  • koa-compress
  • koa-logger
  • koa-compse 将多个中间件合成为一个

中间件原理

关键在于 compose 函数,参考 - https://github.com/z-memo/interview/issues/147

自定义中间件【WIP】