文档
Node.js 入门篇:从零搭建 RESTful API
背景
Node.js 是最流行的后端 JavaScript 运行时。本教程带你从零搭建一个完整的 RESTful API 服务,涵盖路由、中间件、数据库操作。
核心概念
1. 模块系统
Node.js 使用 CommonJS(require / module.exports),也支持 ES Modules(import / export,需 .mjs 或 package.json 中 "type":"module")。
// CommonJS
const express = require('express');
module.exports = myFunction;
// ES Modules
import express from 'express';
export default myFunction;
2. 事件循环(Event Loop)
Node.js 单线程通过事件循环处理异步操作。理解宏任务(setTimeout)和微任务(Promise)的执行顺序是调试的关键。
3. 中间件模式
Express/Koa 的核心思想:请求依次经过多个中间件,每个中间件可:
- 执行代码
- 修改 req/res 对象
- 结束请求(
res.send()) - 调用下一个中间件(
next())
分步操作
第一步:初始化项目
mkdir my-api && cd my-api
npm init -y
npm install express cors morgan
npm install -D nodemon
第二步:基础服务器
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
app.listen(PORT, () => console.log(`Server on port ${PORT}`));
第三步:路由与控制器分离
src/
routes/
users.js
controllers/
usersController.js
models/
user.js
app.js
第四步:集成数据库(SQLite)
npm install better-sqlite3
const Database = require('better-sqlite3');
const db = new Database('app.db');
db.exec(`CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
)`);
第五步:错误处理中间件
// 统一错误处理 — 放在所有路由之后
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Internal Server Error' });
});
项目最终结构
my-api/
├── package.json
├── src/
│ ├── app.js # Express 应用入口
│ ├── db.js # 数据库连接
│ ├── routes/
│ │ └── users.js # 用户路由
│ ├── controllers/
│ │ └── usersController.js
│ └── middleware/
│ └── errorHandler.js
└── app.db # SQLite 数据文件
思考题
- 如果 10,000 个请求同时到达,Node.js 单线程如何处理?
- 中间件
app.use()的顺序为什么重要?如果错误处理中间件放在路由之前会怎样? - CommonJS 和 ES Modules 在循环依赖处理上有何不同?