Skip to content

Node系列 · Express:基本使用

Express 是 Node 生态最老牌、最流行的 Web 框架——Koa 是同一作者(TJ)后续更轻量的作品,Fastify / NestJS 是更新的高性能替代。本章从零起步搭建一个 Express 服务,理解它的核心约定。

一、Express 与同类框架对比

框架风格性能生态何时选
Express中间件链式回调一般最大老项目 / 通用
Koa2async/await 中间件略好中等现代项目
Fastify插件式最快增长中性能敏感
NestJS装饰器 + DI一般企业级 / 团队

Express 不一定是"最好"的,但学习曲线最低、文档最全、第三方中间件最多——新项目入门首选。

二、安装与最小服务

bash
mkdir my-app && cd my-app
npm init -y
npm install express
javascript
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
GitHubexpressjs/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) 内部:

  1. 注册到 Express 的路由表
  2. http 服务收到请求后匹配 path
  3. 匹配到时调用 handler
  4. 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