在每次路由执行函数时额外执行的函数,类似于vue-router的路由守卫
通过<code>app.use()</code>来使用中间件,中间件和路由的执行顺序按上到下依次执行
在中间件中修改的<code>req res</code>在后续中间件和路由中都能访问到,如<code>req.body</code>就是<code>express.json()</code>挂载的属性
中间间也可以使用<code>res.send</code>等方法,但是同一条链上只能有依次<code>send</code>
函数接收三个参数:<code>req,res,next</code>,每个路由守卫都要<code>next()</code>以跳出这个中间件
每个路由也有第三个<code>next</code>参数,用来进入下一个中间件,如果没有<code>next()</code>该路由不会进入下面的中间件 如下代码,只有访问<code>/home</code>时才会打印
<code>next()</code>方法也接收一个参数<code>“route”</code>,通过这样调用会跳过通过多个函数定义的中间件中后面的所有中间件
只有函数:不指定路径,从上到下依次执行
路径加函数(限定路径的中间件):第一个参数是中间件应用的路径,第二个是中间件函数
请求方法加请求路径:和路由定义一样
多个中间件函数:可以在一个中间件上添加多个,每个函数的<code>next()</code>按顺序跳向下一个中间件函数
数组:数组中放入中间件函数,按数组顺序执行,在数组中的中间件函数可以使用<code>next("route")</code>跳出数组执行
express路由对象:通过使用<code>express.Router()</code>获得路由对象,在路由对象上定义路由,然后导入进<code>app.js</code>并<code>use</code>它来实现路由定义,如下,通过将路由单独分离出来更容易维护
通过在<code>use</code>中添加第一个参数,可以限定<code>router</code>中定义的路由的前缀,如下
这样只能通过<code>/test/aaa</code>来访问路由中定义的<code>/aaa</code>
错误处理中间件:在所有中间件后面进行错误处理,函数接收四个参数<code>err req res next</code>,通过在其它中间件中捕获到错误,然后通过<code>next(err)</code>来传递错误到该中间件中,如下(实际上<code>next</code>只要接收到<code>router</code>字符串以外的参数都会被判断为错误
404处理中间件:通过在所有中间件最后,错误处理前添加一个不指定路径的中间件来处理not found
express.json
express.urlencoded
express.raw
express.text
上面四个用来处理对应格式的请求数据,将数据挂载到<code>req.body</code>中
express.static
使用npm下载后引入
官方的中间件仓库