美文网首页
express的middleware函数app.use()

express的middleware函数app.use()

作者: CodingCode | 来源:发表于2020-07-19 05:09 被阅读0次

express的middleware函数app.use()
express API: https://expressjs.com/en/api.html

app.use([path,] callback [, callback...])
  • path的缺省值是"/"

其定义和app.METHOD是一样的,他们的差别主要是:

  • use()的path是前缀匹配,而METHOD()的path的全路径匹配,例如一个请求路径/hello/hello2会匹配上use("/hello", ...),但不会匹配上METHOD("/hello", ...)

注意不管是use()还是METHOD()他们的调用顺序都是和申明的先后顺序一致,而和是use()的callback还是METHOD()的callback无关,从这一点上说use()和METHOD()也没有区别。

所以总结起来:

  1. 一个request是有一系列的callback组成。
  2. 这些callback可能是app.use(),或者是app.METHOD(),顺序安装申明的先后。
  3. 一个callback函数的next()函数,会触发callback链的下一个callback函数被调用
    3.1 如果一个callback函数的next()函数没有被调用,那么后续的所有callback都不会被调用了,相当于request结束了。
  4. 一个callback函数的res.end()类函数会直接返回结果给client,client会认为请求完成返回。
    4.1 自然的后面callback的res.end()类函数会无效,因为client自从收到第一个res.end()函数就认为调用已返回,链接甚至都断开了。
    4.2 如果没有任何一个callback调用res.end()类函数,client会挂起一直等待,即使所有的callback函数已经完成。

举一个例子:

const express = require('express');
const app = express();

app.all('/hello', function (req, res, next) {
  console.log('all 1-1')
  next()
  console.log('all 1-2')
})
app.all('/hello', function (req, res, next) {
  console.log('all 2-1')
  next()
  console.log('all 2-2')
})

app.use('/hello', function (req, res, next) {
  console.log('use 1-1')
  next()
  res.end()
  console.log('use 1-2')
})
app.use('/hello', function (req, res, next) {
  console.log('use 2-1')
  next()
  res.end()
  console.log('use 2-2')
})

app.listen(8080, () => {
  console.log(`Server running at: http://localhost:8080/`);
});

运行结果:

all 1-1
all 2-1
use 1-1
use 2-1
use 2-2
use 1-2
all 2-2
all 1-2

相关文章

网友评论

      本文标题:express的middleware函数app.use()

      本文链接:https://www.haomeiwen.com/subject/qwpkkktx.html