美文网首页
18. express 中的中间件

18. express 中的中间件

作者: 璎珞纨澜 | 来源:发表于2019-04-28 11:07 被阅读0次

    中间件

    官网:http://expressjs.com/en/guide/using-middleware.html

    中间件本质就是一个请求处理方法。该方法接收三个参数:

    • Request —— 请求对象
    • Response —— 响应对象
    • next —— 下一个中间件

    中间件执行步骤:

    1. 当请求进来,会从第一个中间件开始进行匹配,如果匹配,则进来,如果请求进入中间件之后,没有调用 next 则代码会停在当前中间件。
    2. 如果调用了 next 则继续向后找到第一个匹配的中间件,如果不匹配则继续判断下一个中间件是否匹配,直到找到匹配的中间件并执行。所以 next 是一个方法,用来调用下一个中间件的,调用 next 方法也是要匹配的(不是调用紧挨着的那个)。
    3. 如果没有能匹配的中间件,则 Express 会默认输出:Cannot GET 路径

    我们把用户从请求到响应的整个过程分发到多个中间件中去处理,这样做的目的是提高代码的灵活性,动态可扩展性。

    应用程序级别中间件

    是万能匹配,不关心请求路径和请求方法,也就是任何请求都会进入这个中间件。

    app.use(function (req, res, next) {
      console.log('Time:', Date.now())
      next()
    })
    

    只要是以 /xxx/ 开头的:
    app.use('/xxx', function (req, res, next) {
    console.log('Time:', Date.now())
    next()
    })

    路由级别中间件

    express.Router() 就是路由级别中间件
    以下是常用的路由级别中间件:
    get:

    app.get('/', function (req, res, next) {
      res.send('Hello World!')
      next()
    })
    

    post:

    app.post('/', function (req, res, next) {
      res.send('Got a POST request')
    })
    

    put:

    app.put('/user', function (req, res, next) {
      res.send('Got a PUT request at /user')
    })
    

    delete:

    app.delete('/user', function (req, res, next) {
      res.send('Got a DELETE request at /user')
    })
    
    错误处理中间件

    错误处理中间件方便用于进行统一错误处理。

    错误处理中间件执行步骤:

    1. 当发生错误的时候,我们可以调用 next 传递错误对象
    2. 当调用 next 的时候,如果传递了参数,则直接往后找到带有四个参数的应用程序级别中间件,然后就会被全局错误处理中间件匹配到并处理之。
    var express = require('express')
    var fs = require('fs')
    
    var app = express()
    
    app.get('/', function (req, res, next) {
      fs.readFile('.d/sa./d.sa/.dsa', function (err, data) {
        if (err) {
          // return res.status(500).send('Server Error')
          next(err)
        }
      })
    })
    
    app.get('/a', function (req, res, next) {
      fs.readFile('./abc', function (err, data) {
        if (err) {
          // return res.status(500).send('Server Error') 
          next(err)
        }
      })
    })
    
    app.use(function (req, res, next) {
      res.send('404')
    }) // => next(err) 不会进入这个方法
    
    // 配置错误处理中间件,next(err) 将直接进入这个方法
    app.use(function (err, req, res, next) {
      res.status(500).send(err.message)
    })
    
    app.listen(3000, function () {
      console.log('app is running at port 3000.')
    })
    
    
    内置中间件

    具有某种特殊功能的中间件:

    • express.static 提供静态资源,如html文件、img等。
    • express.json 使用 json 有效负载解析传入请求。
    • express.urlencode 使用 url 编码的有效负载分析传入请求。
    第三方中间件

    网站:http://expressjs.com/en/resources/middleware.html

    相关文章

      网友评论

          本文标题:18. express 中的中间件

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