前言

Node.js 被许多人认为是游戏规则的改变者——可能是 Web 开发十年来最大的创新。 它之所以受到喜爱,不仅因为它的技术能力,还因为它在 Web 开发乃至软件开发生态系统中引入的范式转变。

首先,Node.js 应用程序是用 JavaScript 编写的,JavaScript 是网络上最常用的语言,也是每个网络浏览器本机支持的唯一编程语言。 这方面支持诸如单语言应用程序堆栈以及服务器和客户端之间的代码共享等场景。 单一语言还有助于缩小前端和后端工程师之间的差距,使后端编程对于前端开发人员来说极其平易近人且直观。 一旦熟悉 Node.js 和 JavaScript,您就可以轻松地为各种平台和环境构建软件。

Node.js 本身正在为 JavaScript 语言的兴起和发展做出贡献。 人们意识到在服务器上使用 JavaScript 会带来很多价值,他们喜欢它的实用性、灵活性、事件驱动方法以及介于面向对象和函数式编程之间的混合性质。

第二个革命性因素是 Node.js 的单线程编程模型及其异步架构。 除了从性能和可扩展性的角度来看具有明显的优势之外,这一特性还改变了开发人员处理并发和并行性的方式。 互斥锁被队列取代,线程被回调取代,同步被因果关系取代。 这些抽象通常比传统的抽象更容易采用,但它们仍然非常强大,使开发人员在解决日常挑战时能够非常高效。

Node.js 最后也是最重要的一个方面在于它的生态系统:npm 包管理器、不断增长的模块数据库、热情且乐于助人的社区,最重要的是,它自己的基于简单、实用和极端模块化的文化 。

然而,由于这些特殊性,Node.js 开发给人的感觉与其他服务器端平台截然不同,任何刚接触这种模式的开发人员都会经常感到不确定,不知道如何有效地解决最常见的设计和编码问题。常见问题包括 如何组织代码?设计的最佳方法是什么?如何使应用程序更加模块化?如何有效处理一组异步调用?如何确保应用程序在增长的同时不会崩溃?或者更简单地说,实现这一切的正确方法是什么?幸运的是,Node.js 已经成为一个足够成熟的平台,这些问题中的大多数现在都可以通过一种设计模式、一种成熟的编码技术或一种推荐的实践来轻松解答。本书的目的是引导你了解这个由模式、技术和实践组成的新兴世界,向你展示哪些是解决最常见问题的行之有效的方法,并教你如何以它们为起点,构建解决特定问题的方案。

通过阅读本书,您将学到以下内容:

  • Node 方式: 如何在进行 Node.js 开发时使用正确的观点。例如,您将了解不同的传统设计模式在 Node.js 中的表现,或如何设计只做一件事的模块。

  • 一套解决常见 Node.js 设计和编码问题的模式: 您将获得一把由各种模式组成的 "瑞士军刀",随时可用来有效解决日常开发和设计问题。

  • 如何编写可扩展的高效 Node.js 应用程序: 您将了解编写可扩展、组织良好的大型 Node.js 应用程序的基本构件和原则。您将能够将这些原则应用于不属于现有模式范围的新问题。

  • 使用 "现代 JavaScript" 编码: JavaScript 自 1995 年问世以来,已经发生了很多变化,尤其是最近几年。本书将利用最现代的 JavaScript 特性,如类语法、承诺、生成器函数和 async/await,为您提供最新的体验。

在整本书中,你将看到现实生活中的库和技术,如 LevelDB、Redis、RabbitMQ、ZeroMQ、Express 等。这些库和技术将用于演示某种模式或技术,除了使示例更加有用外,它们还将使你极大地接触到 Node.js 生态系统及其一系列解决方案。

无论您是在工作、副业项目还是开源项目中使用或计划使用 Node.js,认识和使用众所周知的模式和技术都将使您在共享代码和设计时使用通用语言,此外,它还将帮助您更好地了解 Node.js 的未来,以及如何让自己的贡献成为其中的一部分。

这本书需要什么

要尝试使用这些代码,您需要安装 Node.js 14 版本(或更高版本)和 npm 6 版本(或更高版本)。如果某些示例需要使用一些额外的工具,我们会在相应的地方进行说明。您还需要熟悉命令行,知道如何安装 npm 软件包,并知道如何运行 Node.js 应用程序。最后,您还需要一个文本编辑器和一个现代网络浏览器来处理代码。

本书适合人群

本书适用于已经初步接触过 Node.js,现在希望在工作效率、设计质量和可扩展性方面充分利用 Node.js 的开发人员。您只需事先通过一些基本示例接触过该技术,并在一定程度上熟悉 JavaScript 语言,因为本书还将涵盖一些基本概念。具有 Node.js 中级经验的开发人员也会发现本书介绍的技术非常有用。

具备一定的软件设计理论背景也有助于理解书中介绍的某些概念。

本书假定您已具备网络应用程序开发、网络服务、数据库和数据结构方面的工作知识。

本书涵盖的内容

第 1 章,Node.js 平台,通过展示平台本身的核心模式来介绍 Node.js 应用程序设计的世界。 它涵盖了 Node.js 生态系统及其理念,并快速介绍了 Node.js 内部结构和反应器模式。

第 2 章,模块系统,深入探讨 Node.js 中可用的模块系统,强调 CommonJS 和 ECMAScript 2015 规范中更现代的 ES 模块之间的差异。

第 3 章,回调和事件,介绍了学习异步编码及其模式的第一步,讨论和比较回调和事件发射器(观察者模式)。

第 4 章,带有回调的异步控制流模式,介绍了一组使用回调在 Node.js 中有效处理异步控制流的模式和技术。 本章教您一些使用纯 JavaScript 缓解“回调地狱”问题的传统方法。

第 5 章,带有 Promise 和 Async/Await 的异步控制流模式,进一步探索更复杂和现代的异步控制流技术。

第 6 章,使用流进行编码,深入探讨 Node.js 中最重要的工具之一:流。 它向您展示了如何使用转换流处理数据以及如何将它们组合成不同的模式。

第 7 章,创建设计模式,开始探索 Node.js 中的传统设计模式。 在本章中,您将了解一些最流行的创建型设计模式,即工厂模式、揭示构造函数模式、构建器模式和单例模式。

第 8 章,结构设计模式,继续探索 Node.js 中的传统设计模式,涵盖了 Proxy、Decorator 和 Adapter 等结构设计模式。

第 9 章,行为设计模式,通过介绍策略、状态、模板、中间件、命令和迭代器等行为设计模式,总结了围绕 Node.js 中传统设计模式的讨论。

第 10 章,Web 应用程序的通用 JavaScript,探讨了现代 JavaScript Web 应用程序最有趣的功能之一:能够在前端和后端之间共享代码。 在本章中,您将通过使用现代工具和库构建简单的 Web 应用程序来学习通用 JavaScript 的基本原理。

第 11 章,“高级秘诀” 采用问题解决方法向您展示如何使用即用型解决方案来处理一些常见的编码和设计复杂性。

第 12 章,可扩展性和架构模式,教您扩展 Node.js 应用程序的基本技术和模式。

第 13 章,消息传递和集成模式,介绍了最重要的消息传递模式,教您如何使用 Node.js 及其生态系统构建和集成复杂的分布式系统。