美文网首页
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 中的中间件

    中间件 官网:http://expressjs.com/en/guide/using-middleware.htm...

  • day07-node-中间件

    案例:结构: Express中的中间件: 中间件:处理请求的,本质就是个函数 在 Express 中,对中间件有几...

  • express middleware的使用

    更新中~ express 中间件 中间件的作用一般是为了实现业务的解耦,提供访问的接口。在express中,中间件...

  • Express API 总结

    1、express 相关 API: express.json(options)这是Express中内置的中间件功能...

  • Node之中间件

    中间件概述 Express框架中一个非常重要的概念——中间件。在Express框架中,允许通过中间件的使用来调用各...

  • Express中间件

    Express框架是由路由和中间件构成的一个web开发框架。 1. Express 中间件 中间件是Express...

  • node express用中间件实现计算一次响应的耗时

    express 中间件 曾经被面试官问过express的中间件中,next是干嘛的,我没答出来,甚是尴尬,今天好好...

  • 利用express托管静态文件

    使用 Express 中的 express.static 内置中间件函数,提供诸如图像、CSS 文件和 JavaS...

  • Express源码书写

    Express基本使用 express是一个函数,koa是类 express中的中间件可以放置路径,路径的规则和c...

  • 跟我一起学Express之session、redis、登录验证

    上节我们说到,express中间件,并简单实现了我们自己的中间件,按照小编自己的理解 express就是靠中间件为...

网友评论

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

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