文章目录
-
- [一、 什么是 Node.js?](#一、 什么是 Node.js?)
- [二、 Node.js 的核心组成](#二、 Node.js 的核心组成)
- [三、 Node.js 的运行机制(事件循环)](#三、 Node.js 的运行机制(事件循环))
- [四、 常见内置模块(无需安装)](#四、 常见内置模块(无需安装))
- [五、 应用场景](#五、 应用场景)
- [六、 npm 包生态](#六、 npm 包生态)
- [七、 Node.js 适合哪些人?](#七、 Node.js 适合哪些人?)
- [八、 优缺点总结](#八、 优缺点总结)
一、 什么是 Node.js?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建高性能网络应用。
- 由 Ryan Dahl 于 2009 年发布。
- 允许你在服务器端使用 JavaScript 编程(以前 JS 只能在浏览器里跑)。
- 异步 I/O、事件驱动、非阻塞模型,适合处理大量并发连接。
二、 Node.js 的核心组成
组成部分 | 描述 |
---|---|
V8 引擎 | Google Chrome 的 JS 引擎,用于将 JS 编译为机器码。 |
libuv | 提供异步 I/O、线程池、事件循环机制的底层库(跨平台 C 代码)。 |
事件循环(Event Loop) | Node.js 的执行模型核心,保证非阻塞异步执行。 |
Node API | 封装的系统级 API(文件、网络、进程、定时器等)。 |
npm | Node.js 的包管理工具,全世界最大的开源模块生态。 |
三、 Node.js 的运行机制(事件循环)
Node.js 使用单线程模型处理异步操作,主要依靠 事件循环(Event Loop)机制。
流程图:
┌────────────────────────────────────┐
│ Node.js 应用启动 │
└────────────────────────────────────┘
↓
初始化事件循环 + 加载脚本
↓
┌────┬────┬────┬────┬────┬────┐
│timers │pending│idle │poll │check│close│
└────┴────┴────┴────┴────┴────┘
↑ ↑
setTimeout 网络/IO完成
事件循环处理任务的顺序:
- timers(定时器)
- pending callbacks
- idle, prepare
- poll(处理 IO)
- check(
setImmediate()
) - close callbacks
四、 常见内置模块(无需安装)
模块名 | 功能 |
---|---|
fs |
文件系统操作(读写文件) |
http / https |
创建 Web 服务 |
path |
路径处理 |
url |
URL 解析 |
events |
实现事件监听器 |
child_process |
启动子进程 |
stream |
流处理(如大文件) |
os |
系统信息 |
示例:创建一个 HTTP 服务器
js
const http = require('http');
const server = http.createServer((req, res) => {
res.end('Hello Node.js');
});
server.listen(3000, () => console.log('Server running on port 3000'));
五、 应用场景
Node.js 的特点是轻量、高并发、低延迟,适合:
场景 | 说明 |
---|---|
高并发接口服务 | 如 RESTful API 网关、BFF 层 |
WebSocket 实时通信 | 如聊天室、协同编辑、游戏 |
SSR 服务端渲染 | 与 React/Vue 结合 |
前端工程构建工具 | 如 webpack、vite(基于 Node.js) |
静态文件服务器 | CDN 边缘服务 |
命令行工具开发 | 如 npm、yarn、vue-cli 等 |
轻量爬虫 | 快速抓取网页内容(结合 puppeteer) |
六、 npm 包生态
全世界最大的开源模块仓库,超过 200 万个包。
常用模块:
包名 | 功能 |
---|---|
express |
Web 框架,快速搭建 API |
cors |
跨域资源共享处理 |
axios |
HTTP 客户端(发请求) |
body-parser |
处理 POST 请求体 |
sequelize |
ORM 框架,操作数据库 |
socket.io |
WebSocket 实时通信 |
nodemon |
自动重启 Node 服务 |
七、 Node.js 适合哪些人?
- 前端开发者:能让你用 JavaScript 写完整项目(前后端)。
- 初学者:上手快、文档丰富、生态成熟。
- 后端开发者:适合构建轻量 API、高并发场景。
- DevOps/全栈开发者:用于自动化工具、构建 CLI、运维脚本。
八、 优缺点总结
优点 | 缺点 |
---|---|
单线程异步,适合高并发 | 不适合 CPU 密集型任务 |
使用 JS,全栈开发方便 | callback 地狱(可用 async/await) |
模块丰富,npm 生态成熟 | 较少原生线程控制支持 |
学习门槛低,跨平台性好 | 不支持多核并行(需 cluster) |