当前位置:   article > 正文

Express中间件(完善)

Express中间件(完善)

Express是一个自身功能极简,完全是由路由和中间件构成的一个web开发框架,从本质上来说,一个Express应用就是在调用各种中间件。

中间件(Middleware) 是一个函数,他可以访问请求对象、响应对象和web应用中处理请求-响应循环流程中的中间件,一般被命名为next变量。

中间件的功能

  • 执行任何代码
  • 修改请求和响应对象
  • 终结请求-响应循环【如果当前中间件没有终结请求-响应循环,则必须调用next()方法将控制权交给下一个中间件,否则请求就会挂起。】
  • 调用堆栈中的下一个中间件

Express应用可使用如下几种中间件:

使用可选择挂载路径,可在应用级或路由级别装载中间件。另外,你还可以同时装在一系列中间件函数,从而在一个挂载点上创建一个子中间件栈。

1、应用级中间件

应用级中间件绑定到 app对象 使用 app.use() app.method(),其中,method是需要处理的HTTP请求的方法,例如 get、put、post等,例如:

  1. var app = express()
  2. // 没有挂载路径的中间件,应用的每个请求都会执行该中间件
  3. // 应用级别中间件需要注意书写的位置
  4. app.use(function (req, res, next) {
  5. console.log('Time:', Date.now())
  6. next()
  7. })

2、路由级中间件

路由级中间件和应用级中间件一样,只是它绑定的对象为 express.router()

var router = express.Router()
  1. var app = express()
  2. var router = express.Router()
  3. // 没有挂载路径的中间件,通过该路由的每个请求都会执行该中间件
  4. router.use(function (req, res, next) {
  5. console.log('Time:', Date.now())
  6. next()
  7. })
  8. // 一个中间件栈,显示任何指向 /user/:id 的 HTTP 请求的信息
  9. router.use('/user/:id', function(req, res, next) {
  10. console.log('Request URL:', req.originalUrl)
  11. next()
  12. }, function (req, res, next) {
  13. console.log('Request Type:', req.method)
  14. next()
  15. })
  16. // 一个中间件栈,处理指向 /user/:id 的 GET 请求
  17. router.get('/user/:id', function (req, res, next) {
  18. // 如果 user id 为 0, 跳到下一个路由
  19. if (req.params.id == 0) next('route')
  20. // 负责将控制权交给栈中下一个中间件
  21. else next() //
  22. }, function (req, res, next) {
  23. // 渲染常规页面
  24. res.render('regular')
  25. })
  26. // 处理 /user/:id, 渲染一个特殊页面
  27. router.get('/user/:id', function (req, res, next) {
  28. console.log(req.params.id)
  29. res.render('special')
  30. })
  31. // 将路由挂载至应用
  32. app.use('/', router)

3、错误处理中间件

错误处理中间件和其他中间件定义类似,只是要使用 4个参数,而不是3个,其签名如下:(err, req, res, next)。

  1. // 错误中间件一定为应用级别的中间件,一定要写在最后
  2. app.use(function(err, req, res, next) {
  3. console.error(err.stack)
  4. res.status(500).send('Something broke!')
  5. })

4、内置中间件

express.static 是Express 唯一内置的中间件。它基于 serve-static,负责在Express应用中托管静态资源。每个应用可有多个静态目录。

  1. app.use(express.static('public'))
  2. app.use(express.static('uploads'))
  3. app.use(express.static('files'))

5、第三方中间件

安装所需功能的node模块,并在应用中加载,可以在应用级加载,也可以在路由级加载。

下面的例子安装并加载了一个解析 cookie的中间件:cookie-parser。

npm install cookie-parser
  1. var express = require('express')
  2. var app = express()
  3. var cookieParser = require('cookie-parser')
  4. // 加载用于解析 cookie 的中间件
  5. app.use(cookieParser())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/580463
推荐阅读
相关标签
  

闽ICP备14008679号