• 【前端知识体系-NodeJS相关】浅谈NodeJS中间件


    1. 中间件到底是个什么东西呢?

    [!NOTE]
    中间件其是一个函数,在响应发送之前对请求进行一些操作

    中间件模型

        function middleware(req,res,next){
            // 做该干的事
        
            // 做完后调用下一个函数
            next();
        }
    

    这个函数有些不太一样,它还有一个next参数,而这个next也是一个函数,它表示函数数组中的下一个函数

    2. 函数数组又是什么呢?

    [!NOTE]
    express内部维护一个函数数组,这个函数数组表示在发出响应之前要执行的所有函数,也就是中间件数组

    使用app.use(fn)后,传进来的fn就会被扔到这个数组里,执行完毕后调用next()方法执行函数数组里的下一个函数,如果没有调用next()的话,就不会调用下一个函数了,也就是说调用就会被终止

    3. 如何实现一个中间件呢?

        function express() {
          // 函数数组用于存放所有的中间件函数
          let fns = [];
          
          let app = function(req, res) {
            let i = 0;
            
            function next() {
              // 取出数组中的下一个函数
              let task = fns[i++];
              // 如果函数存在的u啊
              if (task) {
                  // 就先去执行这个用户自定义的函数里面的业务逻辑(每次把当前的next继续向后传递)
                  task(req, res, next);
              }
            }
            
            // 用户首次调用的执行第一个
            next();
          }
          
          // 使用use的时候就把用户指定的这个函数放入到一个函数数组里面去
          app.use = function(task) {
            fns.push(task);
          }
          
          return app;
        }
    

    4. 模拟实现一个异步按顺序执行的函数?(面试重点)

        function fn1(next) {
          next();
        }
        
        function fn2(next) {
          next();
        }
        
        function fn3(next) {
          next();
        }
        
        
        // 类似于一个异步的迭代器
        function nextRegister(...tasks) {
          let i = 0;
          
          
          function next() {
            let task = tasks[i];
            if (!task || typeof task !== 'function') {
                return ;
            }
            task(next);
          }
          
          // 第一次调用
          next();
        }
        
        // 开始注册三个异步函数
        nextRegister(fn1, fn2, fn3);
    

    5. 描述一下express或者koa的技术架构?

    [!NOTE]
    关键在于解释清楚对路由中间件的理解,可以以koa的洋葱模型讲解为例。

    洋葱模型

  • 相关阅读:
    第五章总结
    第二章总结
    第一章、基础知识总结
    实验 9 根据材料编程
    实验5
    汇编实验4
    实验 3 编程、编译、连接、跟踪
    实验 2 用机器指令和汇编指令编程
    汇编-实验一
    react面试笔录
  • 原文地址:https://www.cnblogs.com/fecommunity/p/11922272.html
Copyright © 2020-2023  润新知