好的!给你一张Node.js 0→1 基础地图(按“教 3 岁”风格:清楚、好记、能落地)。你照着学、照着做就能跑起来。
(🧭=方向,🧩=知识点,🛠=工具,⚠️=易错,✅=行动)
🧭 一、先知道它是什么
- 🟢 Node.js=用 V8 引擎在服务器上跑 JavaScript 的运行时。
- 🌊 事件驱动 + 非阻塞 I/O:适合高并发网络服务(API、实时推送),但不擅长重 CPU 计算(需分线程/队列)。
🧩 二、上手前要补的 JS 基础
- ✨ 语法:
let/const、解构、模板字符串、箭头函数、模块(ESMimport/ CJSrequire)。 - ⏱ 异步:
Promise、async/await、微任务/宏任务、queueMicrotask、setImmediate、process.nextTick。 - 🧯 错误:
try/catch、Promise拒绝处理(unhandledRejection)。 - 🧠 类型:建议学 TypeScript(降低线上翻车率)。
🧰 三、环境与包管理
- 🔢 版本管理:
nvm/fnm安装 当前 LTS。 - 📦 包管理器:
npm/pnpm/yarn(任选其一,坚持用一个)。 - 📄
package.json:scripts、dependencies、devDependencies、type: module(启用 ESM)/ 缺省(CJS)。 - 🔐 依赖安全:
npm audit、锁版本(^慎用)、开启 Dependabot 或同类。
🧩 四、Node 核心模块(最常用)
- 📁
fs(文件) / 📂path/ 🧵stream(大文件/视频传输) - 🌐
http/https(原生 HTTP) / 🔔events - 🧱
buffer(二进制) / ⚙️child_process(跑外部命令) - 💻
os/process(环境变量、信号) - ✅ 能力目标:知道各自干嘛 + 会查文档 + 会写最小示例。
🧩 五、Web 开发常用栈(选一个主线)
- 🚀 Express:生态大、简单好上手。
- ⚡ Fastify:更快、内置校验与良好插件系统。
- 🧭 NestJS:企业级、结构化(基于装饰器/DI),学习成本更高。
-
🔌 常用配件:
- 路由/中间件、CORS、请求体验证(
zod/joi)、日志(pino/winston)。 - 静态文件、文件上传、错误处理中间件(统一返回格式)。
- 路由/中间件、CORS、请求体验证(
✅ 初学者:Fastify 或 Express 起步;需要大项目骨架再上 NestJS。
🧩 六、数据与状态
- 🗄 关系型:
mysql2/pg+ ORM:Prisma(上手快)、TypeORM/Sequelize(可选)。 - 🍃 文档型:MongoDB + Mongoose(灵活 JSON)。
- 🔴 Redis:缓存、会话、限流、队列(
bullmq)。 - 🧪 能力目标:会建一张表/集合、增删改查、简单事务或唯一约束。
🧩 七、认证与安全(最常掉坑)
- 🔑 认证:Session + Cookie(服务端会话)或 JWT(无状态)。
- 🔒 密码:bcrypt/argon2,永不明文。
- 🧼 输入校验 & 逃逸:
zod/joi、防 XSS/SQL 注入(ORM 预编译 +helmet)。 - 🌍 CORS:白名单域名;生产禁用
*。 - 🧾 配置与密钥:
.env+dotenv;不要进 Git;分环境(dev/staging/prod)。
🧩 八、性能与并发
- 🧵 不要阻塞事件循环:CPU 密集用
worker_threads/ 队列转后台;I/O 用异步。 - 💧 流与背压:大文件用
stream.pipe();理解 backpressure。 - 🧪
clinic/0x/autocannon压测与火焰图;EXPLAIN查 SQL 慢因。 - 🧯 优雅下线:监听
SIGTERM,停止接新请求,等旧请求完成再process.exit()。
🧩 九、测试与工程化
- 🧪 测试:
Vitest/Jest(单测)、supertest(接口测)、Playwright(E2E)。 - 🧹 质量:
ESLint+Prettier;Git 钩子(husky+lint-staged)。 - 🔁 CI/CD:GitHub Actions/其他,跑测试、构建、部署。
- 📦 Docker:制作镜像、
.dockerignore、多阶段构建减体积。 - 🛡 12-Factor:无状态服务、环境配置、日志到 stdout、一次性进程。
🧩 十、观测与运维
- 🧾 日志:结构化(
pino),带requestId。 - 📈 指标:Prometheus(
prom-client);健康检查/healthz。 - 🧭 分布式追踪:OpenTelemetry(看链路耗时)。
- 👀 进程守护:
pm2/systemd;负载均衡:Nginx/云原生网关。
✅ 十一、5 分钟跑通最小服务(Express 示例)
// package.json: { "type": "module" }
import express from 'express';
import pino from 'pino-http';
import { z } from 'zod';
const app = express();
app.use(express.json());
app.use(pino());
const schema = z.object({ name: z.string().min(1) });
app.get('/ping', (req, res) => res.json({ ok: true }));
app.post('/hello', (req, res, next) => {
const parsed = schema.safeParse(req.body);
if (!parsed.success) return res.status(400).json(parsed.error.flatten());
res.json({ message: `Hello, ${parsed.data.name}!` });
});
process.on('SIGTERM', () => {
console.log('Graceful shutdown...');
server.close(() => process.exit(0));
});
const server = app.listen(process.env.PORT || 3000);
运行:
npm i express pino-http zod→node index.js→ 打GET /ping、POST /hello。
🧭 十二、14 天轻量路线(每天 45–60 分钟)
1–2️⃣ Node/包管理/脚手架;写 GET /ping
3–4️⃣ 路由/中间件/错误处理;请求体验证
5–6️⃣ 连接数据库(Prisma+SQLite/MySQL),做 CRUD
7️⃣ 会话/JWT 登录;密码加密
8️⃣ Redis 缓存、限流
9️⃣ 日志、健康检查、配置分环境
🔟 测试(Vitest + supertest)
1️⃣1️⃣ Docker 化 & 本地一键启动
1️⃣2️⃣ 优雅下线、进程守护
1️⃣3️⃣ 压测 & 简单性能优化
1️⃣4️⃣ 小项目交付(README、脚本、示例数据)
⚠️ 新手高频坑(看到就躲)
- 用同步 API(
fs.readFileSync)处理大文件 → 阻塞。 - 在热路径里做重 CPU 计算 → 交给 worker/队列。
- JWT 不设过期/不轮换密钥;CORS 全放开;
.env入库。 - ORM 不加索引、全表扫描;分页没
ORDER BY。 - 单环境开发,到线上才发现配置、路径、大小写差异。
🌱 最后给你一句选型口诀
“能用简单就别复杂;能靠配置就别写轮子;CPU 重就丢后台,I/O 多就拥抱异步。”