Express中间件是一个函数,它可以访问请求对象(req)、响应对象(res)和next函数。中间件的主要作用是在处理请求之前或之后执行一些操作,例如验证用户身份、记录日志、解析请求体等。
使用Express中间件有两种方式:应用级别和路由级别。
1. 应用级别中间件
应用级别中间件会在所有路由处理程序之前执行,并且可以通过app.use()方法添加到应用程序实例上。例如:
const express = require('express');
const app = express();
// 日志记录
app.use((req, res, next) => {
console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
next();
});
// 解析请求体
app.use(express.json());
// 处理路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
上面的代码定义了两个应用级别中间件:日志记录和解析JSON请求体。这些中间件将在所有路由处理程序之前执行。
2. 路由级别中间件
路由级别中间件只会对指定的路由进行处理,并且可以通过router.use()方法添加到特定的Router实例上。例如:
const express = require('express');
const router = express.Router();
// 验证用户身份
router.use((req, res, next) => {
if (req.session.user) {
next();
} else {
res.status(401).send('Unauthorized');
}
});
// 处理路由
router.get('/', (req, res) => {
res.send(`Welcome ${req.session.user.name}!`);
});
上面的代码定义了一个路由级别中间件来验证用户身份,并且只有经过验证的用户才能访问该路由。
总结:
Express 中使用 middleware 的方式非常灵活,既可以全局使用也可以针对某个具体接口进行设置,这样就使得我们能够更好地控制接口调用流程,提高系统可靠性和安全性。
最后再问: express最多可以调用多少个中间件
Express 框架没有限制中间件的数量,可以根据需要调用任意多个中间件。但是,过多的中间件可能会影响应用程序的性能和可维护性。因此,在编写 Express 应用程序时,应该仅使用必要的中间件,并尽可能将它们组合成更小、更简单和更易于维护的模块。