Node.js 简介

学了 JavaScript,你只能写浏览器里的代码——可后端呢?数据库呢?部署到服务器呢?Node.js 的出现回答了这个问题。这一章我们先搞清楚 Node 到底是什么、怎么来的、为什么它能让 JS 跑到服务器上。

Node.js 是什么?

Node.js(简称 Node)不是一门语言,也不是框架,而是一个JavaScript 运行时(runtime)。它把 Chrome 浏览器的 V8 JavaScript 引擎"抠"出来,套上一层用 C++ 写的底层能力(文件读写、网络通信、操作系统接口),让 JS 能脱离浏览器、直接在电脑上运行。

浏览器里的 JS 能操作 DOM、能发请求,但不能读写本地文件、不能监听端口、不能调用系统命令——这些都被浏览器沙箱限制着。Node.js 解开了这些束缚:它把操作系统级的能力暴露给 JS,让你用同一门语言写后端服务、CLI 工具、甚至桌面软件。

诞生历史:Ryan Dahl 的"不满"

Node 的诞生源于一位美国工程师 Ryan Dahl 对当时 Web 服务器的三点不满:

2009 年,他在欧洲 JS 大会(JSConf EU)上发布了 Node.js,用 V8 引擎 + 单线程事件循环 + 非阻塞 I/O 的模型解决了上述痛点。这场 20 分钟的演讲,直接催生了一个价值几十亿美元的生态。同年 npm(Node 包管理器)也诞生了,让"装一个库就几秒钟"成为现实。

核心特点

第一个 Node 程序

Node 程序就是一个 .js 文件,用 node 文件名 运行。下面这个例子用到了内置的 os 模块——浏览器 JS 是绝对访问不到这些系统信息的:

// 把以下代码保存为 hello.js
console.log("Hello, Node.js!");

// 用终端运行(不是浏览器控制台):
//   node hello.js
// 输出: Hello, Node.js!

// Node 内置模块直接 require 就能用,不装任何东西
const os = require("os");
console.log("当前系统:", os.platform(), os.hostname());
console.log("CPU 核心数:", os.cpus().length);

把代码保存为 hello.js,在终端里执行 node hello.js(不是在浏览器 Console 里),就能看到输出。这就是 Node 和浏览器 JS 的本质区别:Node 让 JS 拥有了操作系统级的能力

事件循环:Node 的"心脏"

理解 Node 必须理解事件循环。看下面这个经典例子,记住执行顺序:

// 单线程 + 事件循环的演示
console.log("1. 同步代码开始");

// 异步:不会阻塞主线程,先注册回调继续往下
setTimeout(() => {
  console.log("3. 定时器回调(宏任务)");
}, 0);

Promise.resolve().then(() => {
  console.log("2. Promise 回调(微任务)");
});

console.log("4. 同步代码结束");

// 实际输出顺序:1 → 4 → 2 → 3
// 同步代码先跑完 → 微任务(Promise)→ 宏任务(setTimeout)

关键认知:Node 主线程只有一个。同步代码从上到下执行,遇到 setTimeout、Promise、fs.readFile 这种异步 API 时,主线程不会等,而是把回调注册到底层,自己继续往下跑。等同步代码全跑完,事件循环再依次取出"已完成"的异步回调执行。这种模型在网络 I/O 密集场景表现极好——单线程也能扛高并发。

但它的固有局限也要牢记:绝不要在主线程做耗 CPU 的同步运算(比如循环算 1 亿次)。主线程一旦被卡住,所有请求都堵死。耗 CPU 的活要开子线程(worker_threads)或交给别的服务。

Node vs 浏览器 JS

两者用的是同一门语言(JavaScript),但运行环境和能用的 API 完全不同:

Node 都用在哪?典型应用场景

Node 适合"I/O 密集、高并发、实时"的场景,不太适合"CPU 密集"的场景。明星项目和用例:

Node vs 其他后端语言

该不该学 Node?

如果你的方向是前端工程师、全栈、DevOps、或想做自己的产品,Node 几乎是必修课。它会让你从"只能写页面"升级为"能独立做出完整应用"——前端、后端、构建工具、CLI 一人包办。学完本系列,你将能用 Node 写一个完整的 Web API 服务、读懂主流框架源码、构建自己的 CLI 工具,为后续学 Express/Koa/NestJS、Next.js 打下地基。

← 返回 Node.js 教程目录

下一篇 Node.js 环境安装

✈️💬