了解 Express.js 中的中间件及其内部工作原理
在 Express.js 中,中间件是可以访问请求 (req)、响应 (res) 和第三个参数 next 的特殊函数。与常规路由处理程序不同,中间件通过在主要业务逻辑之前执行外部逻辑,在控制应用程序流程方面发挥着关键作用。
中间件如何工作?
当 HTTP 请求到达 Express.js 服务器时,它会流经一系列中间件函数。每个中间件都可以:
如果中间件不调用 next(),则请求-响应周期将终止,并且不会执行任何进一步的逻辑(包括路由处理程序)。
为什么我们使用中间件?
中间件非常适合我们需要在处理请求之前添加可重用逻辑的场景。例如:
定义和使用中间件
中间件函数如下所示:
app.use((req, res, next) => {
// Logic here
next(); // Pass control to the next middleware or route handler
});中间件流程:执行顺序
中间件顺序很重要! Express 按照定义的顺序依次执行中间件。
如果中间件在路由之后定义,则不会影响该路由。这就是为什么必须在 app.js 中的路由之前声明中间件的原因。
例子:
// Middleware to check if the user has admin privileges
app.use((req, res, next) => {
console.log("Checking for admin role...");
// Simulating a user object attached earlier in the pipeline
if (req.user && req.user.role === "admin") {
console.log("Access granted");
next(); // Move to the next middleware or route handler
} else {
console.log("Access denied");
res.status(403).send("You do not have access to this resource.");
}
});
// Routes
app.get("/admin/dashboard", (req, res) => {
res.send("Welcome to the admin dashboard!");
});
app.get("/public", (req, res) => {
res.send("This is a public page.");
});内部执行流程
以下是具体发生的情况: