一、什么是中间件
中间件(Middleware)是在http的请求和响应之间进行拦截处理的模块, express通过各种各样的中间件实现强大的开发功能。
中间件流程.png
中间件流程.png
middleware
是一个包含三个参数(request, response,next)的函数
app.use([path,] callback [, callback...])
负责为express注册中间件
-
path
参数为匹配路由,若指定则只针对特定路由进行拦截。不指定则对所有请求和响应都做拦截 -
calllback(request, response, next)
中间件函数,可以一次传入多个。- request: HTTP请求对象
- response:HTTP响应对象
- next:处理完后交给下一个路由。若不调用则处理到此为止,不进行后续操作
二、Express中间件分类
express大概分为三种中间件: 内置,三方, 自定义
2.1 内置中间件
express.static()
express.static用于响应对静态文件的请求。
express.static(root, [options])
第一个参数root指定静态文件在项目中的目录
app.use(express.static(path.join(__dirname, 'public')));
express.json()
内置的json
中间件负责把带有JSON的请求中(即Content-Type=‘application/json’
)的数据提取出来,它基于body-parser
app.use(express.json());
express.urlencoded([options])
urlencoded
负责将通过urlencoded发送请求(即Content-Type=‘application/x-www-form-urlencoded’
)的数据提取出来,它基于body-parser
经过此中间件后,req.body
为解析后的json串,否则为key-value键值对
options
-
extended
:false - 使用内置querystring解析参数; true - 使用qs库解析参数,允许参数有json-like的复杂数据类型
var expected = {
a: {
b: {
c: 'name'
}
}
};
以上参数可通过以下格式传递从而被服务器解析为json串
http://localhost/user?a[b][c]=name
-
type
: 'application/x-www-form-urlencoded' 只解析此类参数
express.Router
通过'Router()'生成express路由,使得路由可以通过中间件的方式管理,便于模块化开发
2.2 三方中间件
开源可直接使用的中间件,Express正是通过中间件这种扩展式的方式,大大地提升了开发效率,丰富了web开发功能
var express = require('express')
var app = express()
var cookieParser = require('cookie-parser')
// load the cookie-parsing middleware
app.use(cookieParser())
2.3 自定义中间件
应用程序自己定义的中间件,用于处理业务逻辑。
var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
错误处理中间件为特殊的中间件,用于处理异常错误。与普通中间件相比,它包含四个参数,第一个参数为错误信息
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
网友评论