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

(1)目录架构

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

   Express中间件简介_服务器

   Express中间件简介_中间件_02

 

(2)编写入口文件

  Express中间件简介_服务器_03

 

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

  Express中间件简介_服务端_04

 

   接下来开始介绍中间件

 

(3)中间件

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

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

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

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

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

    Express中间件简介_post请求_05

 

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

    Express中间件简介_路径和_06

 

     Express中间件简介_中间件_07

 

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

    Express中间件简介_中间件_08

 

     Express中间件简介_服务器_09

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

    Express中间件简介_中间件_10

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

    Express中间件简介_中间件_11

 

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

    Express中间件简介_中间件_12

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

    Express中间件简介_中间件_13

 

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

    Express中间件简介_服务端_14

 

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

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

    Express中间件简介_post请求_15

 

     如果此时在3里发送响应

    Express中间件简介_post请求_16

 

     Express中间件简介_服务器_17

 

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

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

以/xxx开头的路径中间件

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

    Express中间件简介_中间件_18

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

    Express中间件简介_路径和_19

 

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

    Express中间件简介_post请求_20

 

     输出顺序为?

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

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

    Express中间件简介_服务端_21

 

     Express中间件简介_服务端_22

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

  3、匹配失败时输出内容

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

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

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

    Express中间件简介_post请求_23

 

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

     

    

(4)分类

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

   严格分类:

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

  Express中间件简介_服务器_24

 

  2、路径级别中间件

    Express中间件简介_服务端_25

 

 

 

   

 

 

 

.