美文网首页
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