Node.js 新手入门教程
Node.js 简介
多年来,随着许多流行框架(如 bootstrap、Angular JS 等)的引入,现代 Web 应用程序已经取得了长足的进步。所有这些框架都基于流行的 JavaScript 框架。
但是,在开发基于服务器的应用程序方面,存在着一定的空白,而 Node.js 正是在这种背景下应运而生的。
Node.js 也基于 JavaScript 框架,但它用于开发基于服务器的应用程序。在整个教程中,我们将详细介绍 Node.js 以及如何使用它来开发基于服务器的应用程序。
Node.js 课程大纲
Node.js 新手基础
👉 第 1 课 | 下载并安装 Node.js — 如何在 Windows 上下载并安装 Node.js 和 NPM |
👉 第 2 课 | Node.js NPM 教程 — 创建、发布、扩展和管理 |
👉 第 3 课 | 在 Node.js 中创建 HTTP Web 服务器 — 附带代码示例的教程 |
Node.js 进阶内容!
👉 第 1 课 | Node.js Express 框架教程 — 10 分钟学会 |
👉 第 2 课 | Node.js MongoDB 教程 — 附带示例的完整指南 |
👉 第 3 课 | Node.js Promise 教程 — JavaScript Promises 完整指南 |
👉 第 4 课 | Bluebird Promises 教程 — Bluebird Promises 完整指南 |
👉 第 5 课 | Node.js Generators — 什么是生成器,回调函数 vs. Node.js 生成器 |
👉 第 6 课 | Node.js Streams 教程 — 文件流、管道 |
👉 第 7 课 | 使用 Jasmine 进行 Node.js 单元测试教程 — 完整指南 |
👉 第 8 课 | GraphQL 教程 — 什么是 GraphQL?通过示例学习 |
了解区别!
👉 第 1 课 | GraphQL vs REST — 有什么区别? |
👉 第 2 课 | Node.Js vs AngularJS — 了解区别 |
👉 第 3 课 | Node.js vs Python — 有什么区别? |
Node.js 面试问题与教程 PDF
👉 第 1 课 | Node.js 面试问题 — Top 25 Node.js 面试问题与答案 |
👉 第 2 课 | Node.js 教程 PDF — 下载适合初学者的 Node.js 教程 PDF |
什么是 Node.js?
Node.js 是一个开源、跨平台的运行时环境,用于开发服务器端 Web 应用程序。Node.js 应用程序使用 JavaScript 编写,并可以在多种操作系统上运行。
Node.js 基于事件驱动架构和非阻塞 I/O API,旨在为实时 Web 应用程序优化吞吐量和可伸缩性。
在很长一段时间里,可用的 Web 开发框架都基于无状态模型。无状态模型是指在一个会话中生成的数据(例如关于用户设置和发生事件的信息)不会被保留用于与该用户的下一个会话。
为了在用户请求之间维护会话信息,需要做大量的工作。但有了 Node.js,Web 应用程序终于可以实现实时的双向连接,客户端和服务器都可以发起通信,从而自由地交换数据。
为什么要使用 Node.js?
我们将在接下来的章节中探讨 Node.js 的真正价值,但究竟是什么让这个框架如此出名呢?多年来,大多数应用程序都基于无状态的请求-响应框架。在这类应用程序中,开发者需要确保编写正确的代码来维护用户与系统交互时的 Web 会话状态。
但通过 Node.js Web 应用程序,你现在可以进行实时工作,并实现双向通信。状态得以保持,并且客户端或服务器都可以发起通信。
Node.js 的特性
让我们来看看 Node.js 的一些关键特性。
- 异步事件驱动的 I/O 有助于并发请求处理 —— 这可能是 Node.js 最重要的卖点。这个特性基本上意味着,如果 Node 收到某个输入/输出操作的请求,它会在后台执行该操作,并继续处理其他请求。
这与其他编程语言有很大的不同。下面代码中给出了一个简单的例子。
var fs = require('fs'); fs.readFile("Sample.txt",function(error,data) { console.log("Reading Data completed"); });
- 上面的代码片段是读取一个名为 Sample.txt 的文件。在其他编程语言中,只有在整个文件读取完毕后,下一行处理才会发生。
- 但在 Node.js 中,需要注意的重要代码部分是函数声明(‘function(error,data)’)。这被称为回调函数。
- 这里发生的情况是,文件读取操作将在后台开始。在文件被读取的同时,其他处理可以同时进行。一旦文件读取操作完成,这个匿名函数将被调用,并且文本“Reading Data completed”将被写入控制台日志。
- Node 使用 V8 JavaScript 运行时引擎,这也是谷歌 Chrome 浏览器使用的引擎。Node 在 JavaScript 引擎之上有一个包装层,这使得运行时引擎速度更快,因此 Node 内的请求处理也变得更快。
- 处理并发请求 —— Node 的另一个关键功能是能够以非常小的开销在单个进程中处理并发连接。
- Node.js 库使用 JavaScript —— 这是 Node.js 开发的另一个重要方面。大部分开发社区已经非常熟悉 JavaScript,因此,对于一个了解 JavaScript 的开发者来说,在 Node.js 中进行开发会更容易。
- Node.js 框架有一个活跃而充满活力的社区。由于社区活跃,框架总能获得关键的更新。这有助于使框架始终与 Web 开发的最新趋势保持同步。
谁在使用 Node.js
许多大公司都在使用 Node.js。以下是其中的一些例子。
- Paypal —— Paypal 内部的许多网站也已经开始向 Node.js 过渡。
- LinkedIn —— LinkedIn 正在使用 Node.js 来驱动他们的移动服务器,为 iPhone、Android 和移动 Web 产品提供支持。
- Mozilla 已经实施了 Node.js 来支持浏览器 API,其安装量已达 5 亿次。
- eBay 将其 HTTP API 服务托管在 Node.js 上。
何时使用 Node.js
Node.js 最适合用于流式或基于事件的实时应用程序,例如:
- 聊天应用程序
- 游戏服务器 —— 需要同时处理数千个请求的快速、高性能服务器,这是一个理想的框架。
- 适用于协作环境 —— 这对于管理文档的环境来说非常适用。在文档管理环境中,你会有多个人发布他们的文档,并通过签出和签入文档进行不断的更改。因此,Node.js 很适合这些环境,因为每当文档在文档管理环境中发生变化时,Node.js 中的事件循环就可以被触发。
- 广告服务器 —— 同样,这里可能会有成千上万的请求从中央服务器拉取广告,而 Node.js 可以成为处理这种情况的理想框架。
- 流媒体服务器 —— 使用 Node 的另一个理想场景是多媒体流媒体服务器,其中客户端请求从该服务器拉取不同的多媒体内容。
当你需要高并发性但专用 CPU 时间较少时,Node.js 是一个很好的选择。
最重要的是,由于 Node.js 是基于 JavaScript 构建的,因此当你构建基于相同 JavaScript 框架的客户端应用程序时,它是最合适的。
何时不应使用 Node.js
Node.js 可用于多种不同用途的应用程序。唯一不应使用它的场景是应用程序需要长时间处理的场合。
Node 的结构是单线程的。如果一个应用程序需要在后台进行一些长时间运行的计算,它将无法处理任何其他请求。如上所述,Node.js 最适合用于处理需要较少专用 CPU 时间的场合。