koa中间件及洋葱模型

2 篇文章 0 订阅
本文介绍了Koa中间件的概念,通过实例展示了如何注册和使用中间件,并详细解释了洋葱模型的工作原理,强调了Koa如何严格保证中间件按照洋葱模型执行。通过代码示例,读者可以理解中间件的执行顺序及其在实际应用中的运用。
摘要由CSDN通过智能技术生成

何为中间件?别被这个词吓到了!

中间件本质是函数,在koa实例中使用use方法,把函数作为参数传入,这个函数便可叫做中间件
如:

const Koa = require("koa")
const app = new Koa()function sayHello() {
    console.log("hello world");
}
app.use(sayHello)
app.listen(3000)

像上面的函数,就注册了一个名为sayHello的中间件,启动服务,访问启动地址,随之打印出 hello world
也可以使用匿名函数:

app.use(() => {
     console.log("hello world");
})

作用与第一段代码完全一致

注册多个中间件

app实例上可以注册多个中间件,但只会默认执行第一个,想要让剩下的中间件执行,必须使用next()
如:

app.use((ctx, next) => {
    console.log("1");
    next();
})
app.use((ctx, next) => {
    console.log("2");
})
ctx是上下文对象,next指的是下一个中间件函数
记住,`next()返回的是一个Promise对象`

洋葱模型

来这样一段代码吧:

app.use((ctx, next) => {
    console.log("1");
    next();
    console.log("2");
})
app.use((ctx, next) => {
    console.log("3");
    next();
    console.log("4");
})

执行输出1、3、4、2
原因,这就涉及到koa的所谓洋葱模型了,为什么叫洋葱呢,其实就是从外面一层层的深入,再一层层的穿出来,不要那张经典的洋葱图了,来这一张;
在这里插入图片描述
形象直观了吧,执行fun1函数函数里面如果有next(),立即执行下一个中间件fun2,即便这个中间件还有剩余的待执行语句,下一个中间件同理,直到完整执行完一个中间件,接着回头执行上一个剩下的再回头执行上一个剩下的,直到把第一个剩下的语句执行完。
好了,把洋葱模型初步讲解完毕~~~~ 是不是很意外,不就是这点玩意么说的很玄乎一样~~ 其实这既是一个基理,怎么用还是得看个人 ~~~

严格保证中间件按洋葱模型执行

asyncawait组合保证洋葱模型执行顺序

app.use(async (ctx, next) => {
    console.log("1");
    await next();
    console.log("2");
})

可通过这个语糖获取下个中间件返回的值

app.use(async (ctx, next) => {
    console.log("1");
   const pro =  await next();
   console.log(pro);
    console.log("2");
})

app.use((ctx, next) => {
    console.log("3");
    // next();
    console.log("4");
    return "4545"
    
})

依次输出

1
3
4
4545
2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值