中间件函数能够访问请求对象 (req
)、响应对象 (res
) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next
的变量来表示。
中间件函数可以执行以下任务:
- 执行任何代码。
- 对请求和响应对象进行更改。
- 结束请求/响应循环。
- 调用堆栈中的下一个中间件函数。
如果当前中间件函数没有结束请求/响应循环,那么它必须调用 next()
,以将控制权传递给下一个中间件函数。否则,请求将保持挂起状态。
Express 应用程序可以使用以下类型的中间件:
您可以使用可选安装路径来装入应用层和路由器层中间件。 还可以将一系列中间件函数一起装入,这样会在安装点创建中间件系统的子堆栈
一 应用层中间件使用app.use()和app.METHOD()
函数将应用层中间件绑定到应用程序对象的实例,其中METHOD()是中间件函数处理的请求的小写HTTP()方法
要跳过路由器中间件堆栈中剩余的中间件函数,调用next('route')将控制权传递给下一个路由。
next('route')仅在使用app.METHOD()
或 router.METHOD()
函数装入的中间件函数中有效。
二 路由器层中间件
路由器层中间件的工作方式与应用层中间件基本相同,差异之处在与它绑定的是express.Router()的实例。
var router = express.Router();
使用 router.use()
和 router.METHOD()
函数装入路由器层中间件。
三 错误处理中间件函数
错误处理中间件始终采用4个自变量。必须是提供4个自变量,以将函数表示为错误处理中间件函数。即使无需使用 next
对象,也必须指定该对象以保持特征符的有效性。否则,next
对象将被解释为常规中间件,从而无法处理错误。
错误处理中间件函数的定义方式与其他中间件函数基本相同,差别在于错误处理函数有四个自变量而不是三个,专门具有特征符 (err, req, res, next)
:
四 内置中间件
自 V4.x 起,Express 不再依赖于 Connect。除 express.static
外,先前 Express 随附的所有中间件函数现在以单独模块的形式提供。
express.static(root, [options])
Express 中唯一内置的中间件函数是 express.static
。此函数基于 serve-static,负责提供 Express 应用程序的静态资源。
root
自变量指定从其中提供静态资源的根目录。