zoukankan      html  css  js  c++  java
  • Koa 中间件的执行顺序

    中间件工作原理

    • 初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存储中间件,use调用顺序会决定中间件的执行顺序。
    • 每个中间件都是一个函数(不是函数将报错),接收两个参数,第一个是ctx上下文对象,另一个是next函数(由koa-compose定义)
    • 在建立好http服务器后,会调用koa-compose模块对middleware中间件数组进行处理。具体代码这里就不贴了,原理就是:会从middleware数组中取第一个函数开始执行,中间件函数中调用next方法就会去取下一个中间件函数继续执行。每个中间件函数执行完毕后都会返回一个promise对象。(ps:调用next方法并不是表示当前中间件函数执行完毕了,调用next之后仍可以继续执行其他代码)

    示例代码

    const Koa = require("koa");
    const app = new Koa;
    
    app.use(async (ctx, next) => {
        console.log('1'); 
        await next(); // 调用下一个middleware
        console.log('5')
    });
    app.use(async (ctx, next) => {
        console.log('2');
        await next(); // 调用下一个middleware
        console.log('4');
    });
    app.use(async (ctx, next) => {
        console.log('3');
    });
    
    app.listen(3000)
    console.log("listening on port 3000")

    我们把每个async函数称为middleware,

    输出结果: 12345

    在这个例子里,通过输出结果可以看出三个中间件的执行顺序是:
    中间件1 -> 中间件2 -> 中间件3 -> 中间件2 -> 中间件1

    中间件函数队列,会在最后一个中间件或一个没有调用next的中间件那里停止。就比如第2个中间件没有调用next,那么后续的中间件函数都不会执行。输出 1245

    参考链接:

    1. https://www.jianshu.com/p/02ed208d4577

    2. https://www.jianshu.com/p/8e77334e513b

  • 相关阅读:
    1-6注册View Prism官网案例学习
    MVVM复习
    Prism常用类库翻译
    SqlHelper
    ADO.NET复习
    C#复习思维导图
    网络通信基础知识1
    网络通信
    Linux-线程同步之互斥锁
    linux-线程同步之信号量
  • 原文地址:https://www.cnblogs.com/lfri/p/11936520.html
Copyright © 2011-2022 走看看