express 中的 .use() 方法是一个 *middleware 处理程序。 Express 应用程序本质上是一系列中间件函数调用。
一个 Express 应用程序可以使用 5 种不同类型的中间件,其中主要使用这两种:
- 应用级中间件
- 路由器级中间件
App.use() 用于将 *应用程序级中间件绑定到应用程序对象的实例,该对象在创建 Express 服务器时被实例化(router.use() 用于路由器级中间件)。
语法:app.use(path, middleware function/s)
在这里,路径是可选的。如果未指定路径,则应用程序每次收到请求时都会执行该函数,而不管访问的是哪个 URL。
*示例:
Auth 中间件 - 在 To-Do 应用中,一旦已经创建的用户登录,他就会获得一个 JWT 令牌,每次用户发出 GET、PUT、PATCH、POST 或 DELETE 请求时都必须验证该令牌。
app.use("/api/*", verifyToken(req, res, next): void {
const jwt: string = req.headers['x-token-header'];
if (!jwt) {
res.status(403).send({ message: 'No token provided!' });
} else {
jsonwebtoken.verify(jwt, config.get('secretString'), (err) => {
if (err) {
res.status(403).send(err);
} else {
next();
}
});
});
在这里,添加了路径 /api 以区分不需要 JWT 身份验证的请求,例如注册和登录(因为我们不希望在不需要身份验证时执行中间件)。
*中间件函数是可以访问请求对象 (req)、响应对象 (res) 和应用程序请求-响应周期中的下一个中间件函数的函数。 next 中间件函数通常由一个名为 next 的变量表示。
中间件语法:function(req, res, next)