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、路径级别中间件

    

   

.

原文地址:https://www.cnblogs.com/jianxian/p/12300351.html