2024 年 8 大 Node.js 设计模式2025年2月27日 | 阅读 9 分钟 Node.js 是一个流行的 JavaScript 运行时环境,可用于构建复杂的后端系统。由于其众多功能,设计模式的集成可能具有挑战性。借助设计模式,开发人员可以编写更有效、可重用和可测试的代码。一些设计模式已集成到 Node.js 中,而另一些则可与其他编程语言一起使用。开发人员可以使用功能强大的运行时环境 Node.js 在服务器端运行 JavaScript。随着 Node.js 生态系统的不断发展,许多设计模式应运而生,它们可以提高代码组织性、可伸缩性和可维护性,同时解决常见问题。 设计模式设计模式为 Node.js 开发中常见的许多问题提供了出色的解决方案。它们使程序员能够编写更有效、可扩展和可维护的 Node.js 代码。当开发人员遇到问题时,他们通常会求助于其中一种设计模式。Node.js 有大量的设计模式可供选择。 1. 模块模式
示例输出 8 2 2. 单例模式
示例输出 true Database connected. Database disconnected. 说明
3. 观察者模式
示例输出 Observer 1 received message: Hello Observers! Observer 2 received message: Hello Observers! Observer 2 received message: Observer 1 has been removed 说明
4. 工厂模式工厂模式是一种创建型设计模式,它使用单个对象作为工厂来生产新对象。这种设计模式隐藏了实现逻辑,并鼓励在对象创建中实现灵活性和松散耦合。
示例输出 Thunderbird 500 Apache RTR 200 5. 中间件模式Express 是一款流行的 Node.js 框架,它融合了中间件的概念,这对于执行特定任务非常有帮助。中间件函数在 API 调用请求和响应之间执行操作。中间件能够访问请求和响应对象。中间件模式通过让多个中间件函数处理请求来增加代码的重用性和模块化。在 Express.js 等 Web 框架中,中间件函数通常用于在到达最终路由处理器之前处理数据解析、身份验证和日志记录等各种任务。在收到请求、响应和 next 函数后,每个中间件函数都会调用 next() 将控制权移交给下一个中间件。这种模式确保任务分配清晰,从而更容易扩展和管理功能。
示例输出 Server running at https://:3000/ Hello, Middleware! X-Powered-By: Node.js Unauthorized 说明
6. 代理模式代理模式充当占位符或替代品,可以管理对对象的访问。访问控制、日志记录、延迟初始化和其他功能都可以使用此模式实现。Node.js 允许代理通过延迟创建资源密集型对象直到需要时来优化性能。例如,ProxyImage 类可以通过在首次请求时加载图像来管理对 RealImage 类的访问。通过为对象交互增加一个额外的控制层,此模式有助于资源管理。
示例输出 Loading photo1.jpg Displaying photo1.jpg Displaying photo1.jpg Loading photo2.jpg Displaying photo2.jpg 说明
7. 装饰器模式通过使用装饰器模式,可以静态或动态地为单个对象添加行为,而不会影响同一类中其他对象的行为。此模式对于维护单一职责原则特别有用,因为它允许通过组合而不是继承来扩展功能。Node.js 装饰器允许我们为现有对象或函数添加功能。我们可以通过编写一个装饰器函数来完成此操作,该函数接受一个对象并扩展其行为。装饰器模式的常见应用包括检测、访问控制、日志记录和其他横切关注点。
示例输出 Arguments: 3,4 7 8. Promise 模式Promise 模式是一种比回调更易读、更易维护的方法,它简化了 JavaScript 中的异步编程。Promise 代表一个可能现在、稍后或永远不存在的值。它们有三种不同的状态:pending(待定)、fulfilled(已完成)和 rejected(已拒绝)。通过使用 .then() 和 .catch(),开发人员可以链接多个异步操作,以更有效地处理错误和结果。具有保证的代码更易于阅读,错误处理得到了改进,并且回调地狱得到了减少。Promise 最初包含在 ES6 中,现在是现代 JavaScript 的基本组成部分,尤其是在处理文件操作和网络查询等异步任务时。 示例输出 Data received 说明 以下代码演示了如何在 JavaScript 中使用 Promise 模式来处理异步操作。fetchData 函数使用 setTimeout 将操作延迟一秒,并返回一个类似异步任务的新 Promise。在 Promise 内部调用 resolve("Data received") 以模拟延迟后成功检索数据。然后,调用 fetchData 函数,该函数将 "Data received" 记录到控制台,并使用 .then() 方法处理已解析的值。在此实例中,Promise 始终成功解析,但如果发生错误,.catch() 方法会处理它。与传统的基于回调的技术相比,此代码以逻辑且结构化的方式管理异步任务,使其更易于阅读和维护。 9. 立即调用函数表达式 (IIFE)IIFE(立即调用函数表达式)是一种 JavaScript 设计模式,它允许函数在定义后立即被调用。IIFE 函数提供了一种创建新作用域而不污染全局命名空间的方法,并且它可以用单个语句调用。此模式对于封装代码和创建私有变量很有用。变量初始化、系统配置和启动逻辑是常见用途,因为它们可以隐藏内部详细信息,使其不被全局范围访问。
示例输出 I am private 说明 在此示例中,**privateVariable** 只能在 IIFE 内部访问,避免与其他代码冲突,并且函数被定义并立即执行。 结论总之,模块、单例、观察者、工厂、中间件、代理、装饰器和 Promise 等顶级 Node.js 设计模式为常见的软件设计问题提供了各种独特的解决方案。与将代码组织成可重用单元的模块模式相比,单例模式确保对象只存在一次。观察者模式简化了事件驱动通信,工厂模式简化了对象创建。代理模式管理访问,而中间件模式增强了 Web 框架中的请求处理。Promise 模式有助于更好地管理异步操作,装饰器模式则用于添加动态功能。通过集体利用这些模式,Node.js 开发人员可以编写更结构化、模块化和可维护的代码,它们解决了与资源管理、异步执行和代码组织相关的各种问题。 通过理解和应用这些模式,开发人员可以利用软件设计的最佳实践来构建可扩展且可靠的应用程序。 下一主题Node.js 集群是什么? |
我们请求您订阅我们的新闻通讯以获取最新更新。