了解 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."); });
内部执行流程
以下是具体发生的情况: