一、什么是koa
的洋葱模型
特点: 独特的中间件流程控制,就是典型的洋葱模型
二、解析洋葱模型
在两个中间件函数,用 next 隔开
对应的代码Demo
const Koa = require('koa')
const app = new Koa()
// #1
app.use( async (ctx, next) => {
console.log('1')
await next()
console.log('1')
})
// #2
app.use( async (ctx, next) => {
console.log('2')
await next()
console.log('2')
})
// 设置访问端口号
app.listen(3000, () => {
console.log('koa服务启动成功,可以访问localhost:3000')
})
输出顺序是 : 1 、2、2、1
三、洋葱模型的注意:
- 为了保证洋葱模型的执行,每个中间件必须加
async
,如果有下一个中间件的next()
必须加await
四、为什么一定要按照洋葱模型
- 可以保证你要获取的 上下文信息
ctx
,可以获取到
app.use( async (ctx, next) => {
console.log('1')
await next()
console.log(ctx.r) // 获取到下面的 上下文
console.log('1')
})
app.use( async (ctx, next) => {
console.log('2')
ctx.r = 'res' // 传递上下文
next()
// next()
console.log('2')
})