
Express.js 中间件是特殊的函数,它们在处理 HTTP 请求时扮演着关键角色。每个中间件函数都接收三个参数:请求对象 (req)、响应对象 (res) 和 next 函数。与普通的路由处理程序不同,中间件在主业务逻辑之前执行,从而控制应用程序的流程。
中间件的工作原理
当 HTTP 请求到达 Express.js 服务器时,它会依次经过一系列中间件函数。每个中间件都可以:
next() 函数,将控制权传递给下一个中间件或路由处理程序。如果中间件不调用 next(),则请求-响应周期在此终止,后续逻辑(包括路由处理程序)将不会执行。
为什么要使用中间件?
中间件非常适合在处理请求之前添加可重用的逻辑,例如:
定义和使用中间件
中间件函数的定义如下:
<code class="javascript">app.use((req, res, next) => {
// 在此处添加你的逻辑
next(); // 将控制权传递给下一个中间件或路由处理程序
});</code>req (请求): 包含传入 HTTP 请求的信息(例如,头信息、正文、参数)。res (响应): 用于向客户端发送数据。next(): 用于将控制权传递给下一个中间件函数。中间件执行顺序
中间件的执行顺序至关重要!Express.js 按照定义的顺序依次执行中间件。如果中间件定义在路由之后,则不会影响该路由。因此,必须在 app.js 中的路由定义之前声明中间件。
示例:
<code class="javascript">// 中间件,用于检查用户是否具有管理员权限
app.use((req, res, next) => {
console.log("正在检查管理员角色...");
// 模拟之前在管道中附加的用户对象
if (req.user && req.user.role === "admin") {
console.log("访问已授权");
next(); // 转到下一个中间件或路由处理程序
} else {
console.log("访问被拒绝");
res.status(403).send("您无权访问此资源。");
}
});
// 路由
app.get("/admin/dashboard", (req, res) => {
res.send("欢迎来到管理员控制面板!");
});
app.get("/public", (req, res) => {
res.send("这是一个公共页面。");
});</code>内部执行流程
流程如下:
req.user.role。next() 将控制权传递给下一个中间件或路由。next(),则执行相关的路由处理程序(例如 /admin/dashboard)。流程示例:
/admin/dashboard:next()。/admin/dashboard:关键要点
next() 确保流程继续到下一个中间件或路由。next() 或发送响应,请求将挂起(超时)。以上就是了解 Expressjs 中的中间件及其内部工作原理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号