前言
Node.js 是一个服务器端 JavaScript 平台,允许开发人员在 Web 浏览器之外使用 JavaScript 构建快速且可扩展的应用程序。 它在软件开发领域发挥着越来越广泛的作用,最初是作为服务器应用程序的平台,但现在由于 Electron 等工具包而在命令行开发人员工具甚至 GUI 应用程序中得到广泛使用。 Node.js 将 JavaScript 从浏览器中的困境中解放出来。
它运行在 Google Chrome 浏览器 V8 核心的超快 JavaScript 引擎之上。 Node.js 运行时遵循巧妙的事件驱动模型,尽管使用单线程模型,但该模型仍广泛用于并发处理能力。
Node.js 的主要关注点是高性能、高度可扩展的 Web 应用程序,但它也在其他领域得到采用。 例如,Electron 是围绕 Chrome 引擎的基于 Node.js 的包装器,它允许 Node.js 开发人员创建桌面 GUI 应用程序,并且是构建许多流行应用程序的基础,包括 Atom 和 Visual Studio Code 编辑器、GitKraken、 Postman、Etcher 和桌面 Slack 客户端。 Node.js 在物联网设备上很流行。 它的架构特别适合微服务开发,通常有助于形成全栈应用程序的服务器端。
在单线程系统上提供高吞吐量的关键是 Node.js 的异步执行模型。 它与依赖线程进行并发编程的平台有很大不同,因为这些系统通常具有很高的开销和复杂性。 相比之下,Node.js 使用简单的事件调度模型,该模型最初依赖于回调函数,但现在依赖于 JavaScript Promise 对象和异步函数。
由于 Node.js 位于 Chrome 的 V8 引擎之上,因此该平台能够快速采用 JavaScript 语言的最新进展。 Node.js 核心团队与 V8 团队密切合作,使其能够快速采用在 V8 中实现的新 JavaScript 语言功能。 Node.js 14.x 是当前版本,本书就是针对该版本编写的。
这本书适合谁
服务器端工程师可能会发现 JavaScript 是一种优秀的替代编程语言。 由于语言的进步,JavaScript 很久以前就不再是一种仅适用于在浏览器中为按钮添加动画的简单玩具语言。 我们现在可以使用该语言构建大型系统,并且 Node.js 有许多内置功能,例如一流的模块系统,有助于大型项目。
具有浏览器端 JavaScript 经验的开发人员可能会发现使用本书拓宽他们的视野以包括服务器端开发很有吸引力。
本书涵盖的内容
第 1 章,关于 Node.js,向您介绍 Node.js 平台。 它涵盖了它的用途、Node.js 中的技术架构选择、它的历史、服务器端 JavaScript 的历史、为什么 JavaScript 应该从浏览器中解放出来,以及 JavaScript 领域的最新重要进展。
第 2 章,设置 Node.js,介绍了如何设置 Node.js 开发人员环境。 这包括在 Windows、macOS 和 Linux 上安装 Node.js。 涵盖了重要的工具,包括 npm 和yarn 包管理系统以及 Babel,后者用于将现代 JavaScript 转换为可在旧 JavaScript 实现上运行的形式。
第 3 章,探索 Node.js 模块,深入研究模块作为 Node.js 应用程序中的模块化单元。 我们将深入了解和开发 Node.js 模块以及使用 npm 来维护依赖关系。 我们将了解新的模块格式、ES6 模块,以及如何在 Node.js 中使用它(既然它已得到原生支持)。
第 4 章,HTTP 服务器和客户端,开始探索使用 Node.js 进行 Web 开发。 我们将在 Node.js 中开发几个小型网络服务器和客户端应用程序。 我们将使用斐波那契算法来探索重量级、长时间运行的计算对 Node.js 应用程序的影响。 我们还将学习几种缓解策略并获得开发 REST 服务的初步经验。
第 5 章,您的第一个 Express 应用程序,开始了本书的主要旅程,即开发一个用于创建和编辑笔记的应用程序。 在本章中,我们将运行一个基本的笔记应用程序并开始使用 Express 框架。
第 6 章,实现移动优先范式,使用 Bootstrap V4 框架在笔记应用程序中实现响应式网页设计。 这包括集成流行的图标集以及自定义 Bootstrap 所需的步骤。
第 7 章,数据存储和检索,探讨了几种数据库引擎以及一种在数据库之间轻松切换的方法。 目标是将数据稳健地保存到磁盘。
第 8 章,使用微服务对用户进行身份验证,向 Notes 应用程序添加用户身份验证。 我们将学习如何使用 PassportJS 处理登录和注销。 本地存储的用户凭据和将 OAuth 与 Twitter 一起使用都支持身份验证。
第 9 章,与 Socket.IO 的动态客户端/服务器交互,着眼于让我们的用户彼此实时交谈。 我们将使用一个流行的客户端和服务器之间动态交互的框架Socket.IO来支持内容的动态更新和简单的评论系统。 一切都是由用户伪实时动态更新的,让我们有机会了解实时动态更新。
第 10 章,将 Node.js 应用程序部署到 Linux 服务器,是我们开始部署之旅的地方。 在本章中,我们将使用 Systemd 在 Ubuntu 上部署后台服务的传统方法。
第 11 章,使用 Docker 部署 Node.js 微服务,我们开始探索使用 Docker 进行基于云的部署,将 Notes 应用程序视为微服务集群。
第 12 章,使用 Terraform 将 Docker Swarm 部署到 AWS EC2,实际上通过研究使用 AWS EC2 系统构建云托管系统将我们带入云。 我们将使用流行的工具 Terraform 来创建和管理 EC2 集群,并且我们将学习如何使用 Terraform 功能几乎完全自动化部署 Docker Swarm 集群。
第13章,单元测试和功能测试,让我们探索三种测试模式:单元测试、REST测试和功能测试。 我们将使用流行的测试框架 Mocha 和 Chai 来驱动所有三种模式的测试用例。 对于功能测试,我们将使用 Puppeteer,这是一种流行的框架,用于在 Chrome 实例中自动执行测试。
第 14 章,Node.js 应用程序中的安全性,我们将集成安全技术和工具来减轻安全入侵。 我们将首先使用 Let’s Encrypt 在 AWS EC2 部署上实施 HTTPS。 然后,我们将讨论 Node.js 中用于实施安全设置的几种工具,并讨论适用于 Docker 和 AWS 环境的最佳安全实践。