zoukankan      html  css  js  c++  java
  • Express中间件简介

    本文主要介绍下express框架中的中间件

    (1)目录架构

      首先新建目录express-middleware,初始化姓名,安装express模块

       

       

    (2)编写入口文件

      

       接下来启动项目,做下测试

      

       接下来开始介绍中间件

    (3)中间件

    作用:主要是用来处理请求的,本质就是个函数
      中间件本身是一个方法,接收3个参数:request请求对象、response响应对象、next下一个中间件(可选参数,需要调用下一个中间件时使用)
      当请求进来,会从第一个中间件开始进行匹配。如果匹配则进入,如果不匹配,则向后依次对比匹配
      注意:执行顺序与调用顺序

    主要场景:将一个请求的处理过程,分发到多个环节中,目的效率高,便于维护。即每个环节专门干一件事

      首先要清楚,在Express里中间件有几种分类

      1、万能匹配:不关心请求路径和请求方法的中间件

        也就是说,任何请求都会进入这个中间件

        

         接下来启动服务器,访问localhost:3000端口,便会发送请求到服务器,此时服务器输出如下

        

         

         即使请求路径更改任然会接受请求,如下所示

        

         

    以上为get请求,接下来测试下post请求。
      这里使用postman工具进行测试,能够代替浏览器发送post请求,具体如下
      1、选择请求类型
      2、输入请求地址
      3、点击send发送
      4、查看服务端输出

        

    中间件可以有多个,且参数为req、res、next,接下来做下测试

        

         接下来调整下顺序,2在前,1在后

        

    注意:默认该中间件是不会往后依次执行的

        

         如果2和1调换顺序,如下

        

         此时便只输出2,由此可以分析出

    当一个请求进入中间件之后,如果想请求进入下一个中间件,必须通过next()交出控制权
    所以next()是一个方法,用于调用下一个中间件

        

         如果此时在3里发送响应

        

         

         此时的请求,便经过了3个中间件

       2、路径匹配,关心请求路径的中间件

    以/xxx开头的路径中间件

        例如以/ad开头的,在服务端输出请求路径(不包含/ad)

        

        再例如以/a开头的,则输出/b(不包含/a)

        

        接下来对上述案例做个综合

        

         输出顺序为?

    分析:
        1、请求进入某个中间件之后,如果没有调用next则不会交出执行权,请求也不会向后走。
        2、请求进入后是由上往下的,当请求进入后便会进行中间件匹配(第一个不关心请求路径和方法,任何请求都会进入,所以会匹配上;匹配进入后没有调用next则不会往下走)
      所以结果只会输出1

        接下来对上述案例做下调整

        

         

    分析:
        1、将/b放到a前,虽然是按顺序执行,但只有匹配上才会进入,所以next交出执行权后,会依次按顺序一个个对比,知道匹配上,才会进入。
        2、虽然后面两个都匹配上了,但是没有next

      3、匹配失败时输出内容

         如果没有能匹配到的中间件,则Express会默认输出:Cannot GET 路径

      4、严格匹配:请求方法和请求路径的中间件(用的最为频繁)

    app.get(req,res[,next])
    app.post(req,res[,next])

        

         此时如果请求/a,则输出1,因为进入万能匹配中间件后,没有调用next,所以会停留在该中间件

         

        

    (4)分类

    1、万能匹配中间件(路径请求类型均不要求)
    2、路径匹配中间件(路径匹配)
    3、严格匹配中间件(路径和请求类型)

       严格分类:

      1、应用程序级别中间件(和具体业务不太相关,和请求方法没什么关系)

      

      2、路径级别中间件

        

       

    .

  • 相关阅读:
    Docker——JVM 感知容器的 CPU 和 Memory 资源限制
    Redis——封装通用的Redis组件
    Redis——Springboot集成Redis集群
    Redis——Spring集成Redis集群
    SQL SERVER 聚集索引 非聚集索引 区别
    一个页面同时发起多个ajax请求,会出现阻塞情况
    firefox快速刷新error及解决办法
    js 右击事件
    SQL group by 分组后,同一组的排序后取第一条
    SqlServer触发器
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/12300351.html
Copyright © 2011-2022 走看看