本教程面向零基础或刚接触 Node.js 的开发者,按由浅入深的顺序讲解所有主要知识点。建议按章节顺序阅读。
一、Node.js 简介
Node.js 是什么?
Node.js 是一个让 JavaScript 在服务器端运行的运行时环境。它解决了浏览器只能运行 JS 的限制,让你可以用 JS 写:
- HTTP 接口服务
- 命令行工具
- 数据处理脚本
Node 与浏览器的主要区别
- API 不一样(浏览器有 DOM,Node 有文件系统/网络等)
- 运行模型不同(Node 是服务器侧环境)
- 模块系统不同(CommonJS / ESM)
二、环境准备与 npm
安装 Node.js
- 建议使用 LTS 版本
- 可使用 nvm 管理多个版本(可选)
确认版本:
node -v
npm -v
初始化项目
mkdir my-node-app
cd my-node-app
npm init -y
package.json 基本字段
name/versionmain(入口)scripts(一键执行脚本)
例如加入开发脚本:
{
"scripts": {
"dev": "node src/server.js"
}
}
三、模块系统(CommonJS / ESM)
CommonJS:require
// src/math.cjs
function add(a, b) {
return a + b
}
module.exports = { add }
// src/main.cjs
const { add } = require('./math.cjs')
console.log(add(1, 2))
ESM:import
// src/math.mjs
export function add(a, b) {
return a + b
}
// src/main.mjs
import { add } from './math.mjs'
console.log(add(1, 2))
建议你在新项目中统一一种模块方式(ESM 更现代),并结合团队约定。
四、异步与事件循环
Promise / async-await
async function main() {
const res = await Promise.resolve({ ok: true })
console.log(res.ok)
}
main()
错误处理
async function run() {
try {
throw new Error('boom')
} catch (e) {
console.error('捕获错误:', e.message)
}
}
五、HTTP 服务示例(原生)
创建 src/server.js:
const http = require('http')
const server = http.createServer((req, res) => {
if (req.url === '/health') {
res.setHeader('Content-Type', 'application/json; charset=utf-8')
res.end(JSON.stringify({ ok: true }))
return
}
res.statusCode = 404
res.end('Not Found')
})
server.listen(3000, () => {
console.log('server running at http://localhost:3000')
})
启动:
node src/server.js
访问:http://localhost:3000/health
六、使用 Express 构建 API
安装
npm i express
简单路由
创建 src/app.js:
const express = require('express')
const app = express()
app.use(express.json())
app.get('/health', (_req, res) => {
res.json({ ok: true })
})
app.post('/echo', (req, res) => {
res.json({ received: req.body })
})
app.listen(3000, () => {
console.log('express running at http://localhost:3000')
})
启动:
node src/app.js
七、数据访问(入门思路)
新手建议先把“接口层”和“数据层”分开。你可以从简单存储开始,例如:
- 内存对象(原型期)
- JSON 文件(演示用)
等接口逻辑稳定后再替换为数据库(如 PostgreSQL / MySQL)。
八、日志与错误处理
统一错误返回
Express 可以通过中间件做统一处理:
app.use((err, _req, res, _next) => {
console.error(err)
res.status(500).json({ message: 'internal error' })
})
日志建议
- 开发期:
console.log够用 - 生产期:用成熟日志库(如 pino/winston)更可观测
九、测试与调试
Jest 示例(单元测试)
npm i -D jest
在 package.json 添加:
{
"scripts": {
"test": "jest"
}
}
写测试:
function add(a, b) {
return a + b
}
test('add', () => {
expect(add(1, 2)).toBe(3)
})
调试
- 使用断点调试(IDE)
- 关键函数先写日志,再逐步定位问题
十、部署与小结
部署常见方式
- 静态站点不适用后端部署
- 后端服务通常使用:
- 进程管理:PM2
- 容器:Docker
- 平台:Vercel/Render/Fly.io 等(取决于你的项目形态)
小结
- Node:用 JS 写后端服务
- npm:管理依赖与脚本
- 模块:CommonJS / ESM 二选一并统一
- 异步:Promise 与 async/await
- API:原生 http 与 Express 入门
- 质量:Jest 测试与统一错误处理
十一、学习路径小结
- 安装 Node 并完成 npm 项目初始化
- 理解模块系统(require/import)
- 写几个 async/await 的函数并练习错误捕获
- 用原生 http 实现
/health - 用 Express 做一个最小 API(health + echo)
- 加上至少 1-2 个 Jest 单测,再考虑部署
遇到问题可查阅 Node.js 官方文档 与社区示例。