中间件
中间件
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