node.js详解

文章目录

    • [一、 什么是 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完成

事件循环处理任务的顺序:

  1. timers(定时器)
  2. pending callbacks
  3. idle, prepare
  4. poll(处理 IO)
  5. check(setImmediate()
  6. 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)