Express中间件概览

一、 中间件概念

所谓中间件就是在收到请求后和发送响应之前的过程中执行的一系列函数。中间件接收(req, res, next)作为参数。
req和res分别为resquest和response,next()方法表示执行完当前中间件后进入下一个中间件。

中间件的主要行为:
  • 执行任意代码
  • 改变requestresponse对象
  • 结束请求-响应调用连
  • 调用堆中的下一个中间件

如果当前中间件不会结束响应,则必须调用next()进入下一个中间件,否则请求会被挂起(next(err)除外)。

中间件使用示例
let express = require('express')
let app = express()

let requestTime = function (req, res, next) {       
  req.requestTime = new Date().toISOString();
  String();
  next()
}

app.use(requestTime)       // requestTime 中间件在req中添加了requestTime的属性。

app.get('/', function (req, res) {
  let responseText = 'Hello World!<br>'
  responseText += '<small>Requested at: ' + req.requestTime + '</small>'
  res.send(responseText)
})

app.listen(3000)
中间件的基本类型
  • 应用级中间件
  • 路由级中间件
  • 错误处理中间件
  • 内置中间件
  • 第三方中间件
1.应用级中间件

示例:

var app = express()

app.use(function (req, res, next) {
  console.log('Time:', Date.now())
  next()
})
app.get('/user/:id', function (req, res, next) {
  res.send('USER')
})

注意: next('route')可以跳过下一个路由中间件。但是只在app.METHOD()或者router.METHOD中有效。

注意: next('router')可以跳过剩余的路由中间件

2. 路由级中间件

示例代码

var app = express()
var router = express.Router()

// predicate the router with a check and bail out when needed
router.use(function (req, res, next) {
  if (!req.headers['x-auth']) return next('router')
  next()
})

router.get('/', function (req, res) {
  res.send('hello, user!')
})

// use the router and 401 anything falling through
app.use('/admin', router, function (req, res) {
  res.sendStatus(401)
})
3. 错误处理中间件

错误处理中间件有四个入参(err, req, res, next),有四个入参的就是错误处理中间件。
eg:

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})
4. 内置中间件

Express的内置中间件函数

中间件函数作用
express.static可以用来处理网站里的静态文件的GET请求
express.jsonparses incoming requests with JSON payloads. (Express 4.16.0+)
express.urlencodedparses incoming requests with URL-encoded payloads. ( Express 4.16.0+)
5. 第三方中间件
npm install <第三方中间件>

Reference :

  1. Writing middleware for use in Express apps
  2. Using middleware
  3. 常用中间件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值