Node系列 · Express:基本使用
Node系列 · Express:基本使用
Express 是 Node 生态最老牌、最流行的 Web 框架——Koa 是同一作者(TJ)后续更轻量的作品,Fastify / NestJS 是更新的高性能替代。本章从零起步搭建一个 Express 服务,理解它的核心约定。
一、Express 与同类框架对比
| 框架 | 风格 | 性能 | 生态 | 何时选 |
|---|---|---|---|---|
| Express | 中间件链式回调 | 一般 | 最大 | 老项目 / 通用 |
| Koa2 | async/await 中间件 | 略好 | 中等 | 现代项目 |
| Fastify | 插件式 | 最快 | 增长中 | 性能敏感 |
| NestJS | 装饰器 + DI | 一般 | 大 | 企业级 / 团队 |
Express 不一定是"最好"的,但学习曲线最低、文档最全、第三方中间件最多——新项目入门首选。
二、安装与最小服务
mkdirmy-app&&cdmy-appnpminit-ynpminstallexpressconst express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World'); }); app.listen(3000, () => { console.log('服务运行在 http://localhost:3000'); });$nodeapp.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 | 删除用户 |
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 协议解析——让你专注业务逻辑。
六、第一个完整服务
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'); });测试:
$curlhttp://localhost:3000/api/users{"users":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]}$curl-XPOST-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
