定义
Node.js 是一个基于Chrome V8引擎的JavaScript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型。
特点
- 它是一个Javascript运行环境
- 依赖于Chrome V8引擎进行代码解释执行
- 事件驱动
- 非阻塞I/O
- 轻量、可伸缩,适于实时数据交互应用
用处
- WEB服务器
- 辅助制作前端工具
- 作为前端和服务端的中间层,对接Java、php等高计算服务器
- RESTful API
- 这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。
- 统一Web应用的UI层
- 目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。
- 不讨论这种架构是好是坏,但是有另外一种实践,面向服务的架构,更好的做前后端的依赖分离。如果所有的关键业务逻辑都封装成REST调用,就意味着在上层只需要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另一个页面的,他们也不用管用户数据更新是通过Ajax异步获取的还是通过刷新页面。
- 大量Ajax请求的应用
- 例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,NodeJS能响应大量的并发请求。总而言之,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。
- RESTful API
API列表
| API | 简介 |
|---|---|
| assert - 断言 | 提供了一组断言函数,用于验证不变量是否符和预期。 |
| asynchronous context tracking 异步上下文跟踪 | 这些类用于关联状态并在整个回调和承诺链中传播它。它们允许在WEB请求的所有生命周期中存储数据或其他异步持续期间存储数据。 |
| async hooks - 异步钩子 | 提供了一个用于跟踪异步资源的API。 |
| Buffer - 缓冲器 | 表示固定长度的字节序列。Buffer 类是 JavaScript 的 Uint8Array 类的子类,且继承时带上了涵盖额外用例的方法。 |
| C++ addons C++ 插件 | addons 是用 C++ 编写的动态链接共享对象。该require()函数可以将 addons 加载为普通的Node.js 模块。addons 提供 JavaScript 和 C/C++库之间的接口。 |
| C++ addons with Node-API 使用Node-API 构建的插件 | 简称为 N-API,用于构建原生插件的API。它独立于底层 JavaScript运行时(例如V8),并作为Node.js 本身的一部分进行维护。 |
| C/C++ embedder API 嵌入到C/C++的API | 用于在Node.js 环境中从其他C++ 软件执行JavaScript。 |
| child process - 子进程 | 提供了衍生子进程的能力,此功能主要由 child_process.spawn() 函数提供。 |
| cluster - 集群 | 创建共享服务器端口的子进程。单个 Node.js 实例运行在单个线程中。 为了充分利用多核系统,有时需要启用一组 Node.js 进程去处理负载任务。 |
| command line | 指导文档,Node.js带有多种CLI选项。这些选项公开了内置调试、执行脚本的多种方式以及其他有用的运行时选项。 |
| console - 控制台 | 提供了一个简单的调试控制台,类似于 Web 浏览器提供的 JavaScript 控制台。 |
| crypto - 加密 | 提供了加密功能,包括对OpenSSL的哈希、HMAC、加密、解密、签名以及验证功能的一整套封装。 |
| debugger - 调试器 | Node.js包含了一个进程外的简单调试实用程序。可通过 V8 检查器或内置的调试客户端访问。 要使用它,请使用 inspect 参数启动 Node.js,并带上要调试的脚本的路径。 |
| diagnostics channel 诊断通道 | 该模块提供了一个API来创建命名通道以报告任意消息数据以进行诊断。 |
| dns - 域名服务器 | 用于启用域名解析。 |
| domain - 域 | 弃用 |
| Error - 错误 | 所有由 Node.js 引起的 JavaScript 错误与系统错误都继承自或实例化自标准的 JavaScript 类,且保证至少提供类中的属性。 |
| events - 事件触发器 | 大多数 Node.js 核心 API 构建于惯用的异步事件驱动架构,其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。所有能触发事件的对象都是 EventEmitter 类的实例。 |
| file system - 文件系统 | 提供了用于与文件系统进行交互的API,可进行文件夹、文件的同步和异步的增删改查。 |
| global - 全局变量 | 全局变量。 |
| http - HTTP | 提供了 HTTP 协议的实现。 |
| http2 - HTTP/2 | 提供了 HTTP/2 协议的实现。 |
| https - HTTPS | 提供了 HTTPS 协议的实现。 |
| inspector - 检查器 | 提供了用于与V8检查器进行交互的API。 |
| Modules: CommonJS modules | 介绍文档,在Node.js 模块系统中,每个文件都被视为一个单独的模块。 |
| Modules: ECMAScript modules | 介绍文档,ECMAScript modules是打包 JavaScript 代码以便重用的官方标准格式。模式使用各种import和export语句定义。 |
| Modules: moduleAPI | 介绍文档,提供可与Module 实例交互的通用实用的方法,module是CommonJS moules 常见的变量,可通过 import 'module’或require('module')来访问。 |
| Modules: Packages | 介绍文档,Packages 是一个由package.json 描述的文件夹树。此页面为包作者编写package.json文件提供了指导,并为package.jsonNode.js 定义的字段提供了参考。 |
| net - 网络 | 用于创建基于流的TCP或ICP的服务器(net.createServer())与客户端(net.createConnection())。 |
| os - 操作系统 | 提供了与操作系统相关的实用方法和属性。 |
| path - 路径 | 提供了一些实用工具,用于处理文件和目录的路径 |
| perf hooks - 性能钩子 | 提供了W3C Web Performance API的子集以及用于Node.js特定性能评估的其他API的实现。 |
| policies 安全策略 | 试验性地支持在加载代码时创建策略,该策略是一种安全特性,旨在保证Node.js能够加载什么代码。 |
| process - 进程 | 一个全局变量,提供了当前Node.js进程的信息并对其进行控制。虽然它是一个全局变量,但建议通过require或import显式地访问它。 |
| punycode - 域名代码 | 弃用 |
| querystring - 查询字符串 | 用于解析和格式化URL查询字符串的实用工具。 |
| readline - 逐行读取 | 提供了一个接口,用于一次一行地读取可读流(例如 process.stdin)中的数据 |
| repl - 交互式解释器 | 提供了一种“读取-求值-输出”循环(REPL)的实现,它可作为一个独立的程序或嵌入到其他应用中 |
| report - 报告 | 提供json格式的诊断摘要,并写入文件。该报告旨在用于开发、测试、生产使用,以捕获和保存用于问题确定的信息。 |
| stream - 流 | stream 是Node.js中处理流式数据的抽象接口。该模块用于构建实现了流接口的对象。Node.js 提供了多种流对象。 例如,HTTP 服务器的请求和 process.stdout 都是流的实例。流可以是可读的、可写的、或者可读可写的。 所有的流都是 EventEmitter 的实例。 |
| string decoder - 字符串解码器 | 提供了一个 API,用一种能保护已编码的多字节 UTF-8 和 UTF-16 字符的方式将 Buffer 对象解码为字符串。 |
| timer - 定时器 | 开放了一个全局的 API,用于安排函数在未来某个时间点被调用 |
| tls - 安全传输层 | 该模块是对安全传输层(Transport Layer Security)及安全套接层(Security Scokets Layer)协议的实现,建立在OpenSSL的基础上。 |
| trace events - 跟踪事件 | 提供了一种集中化由V8,Node.js核心和用户空间代码生成的跟踪信息的机制。 |
| tty - 终端 | 提供了 tty.ReadStream 和 tty.WriteStream 类。 在大多数情况下,不需要也不可能直接地使用此模块 |
| url - URL | 用于处理与解析 URL。 |
| util - 实用工具 | 用于支持 Node.js 内部 API 的需求。 大部分实用工具也可用于应用程序与模块开发者。 |
| v8 - V8引擎 | 暴露了特定于内置到 Node.js 二进制文件中的 V8 版本的 API。 |
| vm - 虚拟机 | 可在 V8 虚拟机上下文中编译和运行代码。 vm 模块不是安全的机制。 不要使用它来运行不受信任的代码。 |
| wasi - WASI | 提供了WebAssembly系统接口规范的实现。 WASI通过类似于POSIX的功能的集合,使沙盒WebAssembly应用程序可以访问底层操作系统。 |
| web crypto API-web 加密 | Web Crypto API 的实现 |
| web Streams API -web 流 | WHATWG Streams Standard 的实现,它类似于Node.js Streams API,但后来出现并已成为许多 JavaScript 环境的流数据的标准 API。 |
| worker threads - 工作线程 | 允许并行地执行 JavaScript 的线程 |
| zlib - 压缩 | 提供通过 Gzip、Deflate/Inflate、和 Brotli 实现的压缩功能。 |