职责链模式通过中间件串联处理逻辑,实现解耦与灵活控制。以Koa为例,use注册函数,compose递归执行,next控制流程,形成洋葱模型,适用于请求拦截、权限校验等场景,提升系统可维护性与扩展性。

在现代JavaScript开发中,职责链模式与中间件架构被广泛应用于构建灵活、可扩展的系统,尤其是在框架设计中。这种模式允许我们将多个处理逻辑串联起来,每个节点只关心自己的任务,处理完后决定是否继续传递给下一个节点。Node.js中的Koa、Express,以及前端的Redux,都是典型的中间件架构实现。
职责链模式(Chain of Responsibility)是一种行为设计模式,它允许多个对象有机会处理请求,从而解耦发送者和接收者。请求沿着链传递,直到某个对象处理它为止。
在JavaScript中,这种模式常用于:
每个中间节点都有权决定是否继续向下传递,也可以终止流程或修改上下文数据。
立即学习“Java免费学习笔记(深入)”;
一个典型的中间件系统包含三个核心部分:应用实例、use方法注册中间件、以及启动执行的机制(如listen或dispatch)。
以一个简化版的Koa风格中间件系统为例:
Ke361是一个开源的淘宝客系统,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制, 融合了模块化、驱动化和插件化的设计理念于一体,以帮助想做淘宝客而技术水平不高的朋友。突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。
229
class App {
constructor() {
this.middlewares = [];
}
use(fn) {
this.middlewares.push(fn);
}
createContext(req, res) {
return { req, res };
}
compose(ctx, middlewares, index = 0) {
const next = () => {
if (index >= middlewares.length) return Promise.resolve();
const middleware = middlewares[index];
return Promise.resolve(middleware(ctx, () => {
index++;
return next();
}));
};
return next();
}
async listen(req, res) {
const ctx = this.createContext(req, res);
await this.compose(ctx, this.middlewares);
}
}
说明:
开发者可以按需注册中间件,每个中间件接收上下文和next函数:
const app = new App();
app.use(async (ctx, next) => {
console.log('Request started');
await next();
console.log('Request finished');
});
app.use(async (ctx, next) => {
ctx.user = { id: 123 };
await next();
});
app.use(async (ctx, next) => {
ctx.res.body = 'Hello World';
// 不调用next,终止流程
});
执行顺序遵循洋葱模型:外层中间件包裹内层,next前为进入,next后为返回阶段。
这类架构适用于需要分阶段处理流程的场景:
通过拆分职责,系统更易于测试、维护和复用。
基本上就这些。中间件架构的本质是利用职责链模式组织代码逻辑,让每个模块专注单一职责,同时保持流程的可控性与灵活性。理解其原理有助于更好地使用现有框架,也能为自定义系统设计提供思路。不复杂但容易忽略的是next调用的时机和异步处理的一致性。
以上就是JavaScript职责链模式_中间件架构的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号