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