Express.js 完全指南:路由、中间件与 REST API 开发实战

Express.js 是最流行的 Node.js Web 框架。本文详解路由系统、中间件机制、错误处理、请求验证、项目结构组织、生产部署准备,含完整的 CRUD API 代码示例。

Express.js 是 Node.js 生态中最流行、最轻量的 Web 框架,自 2010 年发布以来一直是构建 REST API 和 Web 应用的首选。本文从路由到中间件,从开发到生产,覆盖 Express 的完整实战路径。


一、项目初始化

mkdir my-api && cd my-api
npm init -y
npm install express
npm install -D nodemon @types/express typescript ts-node

npx tsc --init
// src/index.ts
import express, { Request, Response } from 'express';

const app = express();
app.use(express.json());

app.get('/', (req: Request, res: Response) => {
  res.json({ message: 'Hello Express' });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

二、路由系统

import { Router } from 'express';

const userRouter = Router();

// 参数路由
userRouter.get('/:id', (req, res) => {
  res.json({ id: req.params.id });
});

// 查询参数
userRouter.get('/', (req, res) => {
  const { page = '1', limit = '10' } = req.query;
  res.json({ page, limit });
});

// POST 请求体
userRouter.post('/', (req, res) => {
  const { name, email } = req.body;
  res.status(201).json({ id: 1, name, email });
});

app.use('/users', userRouter);

三、中间件

// 日志中间件
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
});

// 错误处理中间件(必须放在最后)
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
  console.error(err.stack);
  res.status(500).json({ error: 'Something broke!' });
});

四、项目结构

src/
├── index.ts           # 入口
├── routes/
│   ├── users.ts
│   └── posts.ts
├── controllers/
│   ├── userController.ts
│   └── postController.ts
├── middleware/
│   ├── auth.ts
│   ├── errorHandler.ts
│   └── validate.ts
├── models/
│   └── user.ts
└── utils/
    └── db.ts

常见问题

Express 5 什么时候发布?

Express 5 目前处于 RC 阶段,主要改进是原生支持 async 错误处理(不再需要 express-async-errors 包)。

Express vs Fastify vs Nest.js 怎么选?

框架特点适用
Express极简、生态最大中小型 API、快速原型
Fastify性能最好、Schema 验证内置性能敏感、大型 API
Nest.js企业级、模块化、TypeScript 原生大型项目、团队协作

相关阅读

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「frontend」更多文章