在 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."); });
以下是逐步发生的事情:
以上是了解 Express.js 中的中间件及其内部工作原理的详细内容。更多信息请关注PHP中文网其他相关文章!