Node系列 · Express:基本使用
Express 是 Node 生态最老牌、最流行的 Web 框架——Koa 是同一作者(TJ)后续更轻量的作品,Fastify / NestJS 是更新的高性能替代。本章从零起步搭建一个 Express 服务,理解它的核心约定。
一、Express 与同类框架对比
| 框架 | 风格 | 性能 | 生态 | 何时选 |
|---|---|---|---|---|
| Express | 中间件链式回调 | 一般 | 最大 | 老项目 / 通用 |
| Koa2 | async/await 中间件 | 略好 | 中等 | 现代项目 |
| Fastify | 插件式 | 最快 | 增长中 | 性能敏感 |
| NestJS | 装饰器 + DI | 一般 | 大 | 企业级 / 团队 |
Express 不一定是"最好"的,但学习曲线最低、文档最全、第三方中间件最多——新项目入门首选。
二、安装与最小服务
bash
mkdir my-app && cd my-app
npm init -y
npm install expressjavascript
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(3000, () => {
console.log('服务运行在 http://localhost:3000');
});bash
$ node app.js
服务运行在 http://localhost:3000三、官方资源
| 资源 | 地址 |
|---|---|
| 英文官网 | expressjs.com |
| 中文官网 | expressjs.com.cn |
| GitHub | expressjs/express |
四、REST 风格路由
Express 推荐按 RESTful 风格设计路由——HTTP 方法 + URL 表达"对资源的操作":
| 方法 | 路径 | 含义 |
|---|---|---|
GET | /users | 用户列表 |
GET | /users/:id | 单个用户详情 |
POST | /users | 创建用户 |
PUT | /users/:id | 整体更新用户 |
PATCH | /users/:id | 部分更新用户 |
DELETE | /users/:id | 删除用户 |
javascript
app.get('/users', listUsers);
app.get('/users/:id', getUser);
app.post('/users', createUser);
app.put('/users/:id', updateUser);
app.patch('/users/:id', partialUpdateUser);
app.delete('/users/:id', deleteUser);五、与原生 http 模块的关系
Express 是 http 模块的封装,底层完全一样:
每一段 app.get(path, handler) 内部:
- 注册到 Express 的路由表
- http 服务收到请求后匹配 path
- 匹配到时调用 handler
- handler 里通过
res.send()/res.json()返回响应
Express 的价值不是性能,而是抽象掉 HTTP 协议解析——让你专注业务逻辑。
六、第一个完整服务
javascript
const express = require('express');
const app = express();
// JSON body 解析(Content-Type: application/json)
app.use(express.json());
// 模拟数据库
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
// 路由
app.get('/api/users', (req, res) => {
res.json({ users });
});
app.get('/api/users/:id', (req, res) => {
const user = users.find((u) => u.id === Number(req.params.id));
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
res.json(user);
});
app.post('/api/users', (req, res) => {
const newUser = { id: users.length + 1, ...req.body };
users.push(newUser);
res.status(201).json(newUser);
});
app.listen(3000, () => {
console.log('http://localhost:3000');
});测试:
bash
$ curl http://localhost:3000/api/users
{"users":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]}
$ curl -X POST -H "Content-Type: application/json" \
-d '{"name":"Carol"}' http://localhost:3000/api/users
{"id":3,"name":"Carol"}七、最佳实践
| 场景 | 推荐 |
|---|---|
| 项目起步 | npm init + npm install express |
| 路由设计 | REST 风格(GET / POST / PUT / DELETE) |
| JSON 接口 | app.use(express.json()) 解析请求体 |
| 文件上传 | multer 中间件 |
| 跨域 | cors 中间件(详见 跨域 CORS) |
| 路由拆分 | express.Router()(详见 路由) |
| 自动重启 | nodemon(见 nodemon 章节) |
八、小结
- Express 是 Node 老牌 Web 框架;最小服务 5 行代码
- 推荐 REST 风格:HTTP 方法 + URL 表达资源操作
- Express 是
http模块的封装,底层完全一致 - 项目结构:
app.js入口 + 路由模块 + 中间件 - 中文文档:expressjs.com.cn
