文档
Express 毕设实战 — 快速搭建后端 API
前言
Express 是 Node.js 最经典的 Web 框架,没有之一。它足够简单,但配合中间件生态能构建企业级应用。毕选用 Express 的最大优势是 快:从零到能演示的 API 只需一个晚上。
第一章:中间件机制 — Express 的灵魂
Express 的核心就是 中间件管道。每个请求依次经过所有中间件:
// 中间件1: 日志
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // 不调 next() 请求就卡住了!
});
// 中间件2: 解析 JSON body
app.use(express.json());
// 中间件3: 认证(仅 /api 路由)
app.use('/api', (req, res, next) => {
if (!req.headers.authorization) {
return res.status(401).json({ error: '未登录' });
}
next();
});
// 最终处理
app.get('/api/data', (req, res) => {
res.json({ message: '通过认证' });
});
执行顺序:请求 → 日志 → JSON解析 → 认证检查 → 路由处理 → 响应
第二章:错误处理
毕设答辩时如果程序崩溃就尴尬了。Express 的错误处理中间件是最后防线:
// 业务中抛出错误
app.get('/user/:id', async (req, res, next) => {
try {
const user = await db.findUser(req.params.id);
if (!user) {
const err = new Error('用户不存在');
err.status = 404;
throw err;
}
res.json(user);
} catch (err) {
next(err); // 交给错误处理中间件
}
});
// 全局错误处理(必须有 4 个参数)
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(err.status || 500).json({
error: err.message || '服务器内部错误',
});
});
第三章:文件上传
毕设常见需求:头像上传、论文提交、图片管理。Multer 一行搞定:
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
// req.file 包含文件信息
res.json({
filename: req.file.originalname,
size: req.file.size,
url: `/uploads/${req.file.filename}`,
});
});
第四章:Express 生态必知中间件
| 中间件 | 用途 | 安装 |
|---|---|---|
morgan |
HTTP 请求日志 | npm i morgan |
cors |
跨域资源共享 | npm i cors |
helmet |
安全响应头 | npm i helmet |
express-rate-limit |
API 限流 | npm i express-rate-limit |
compression |
Gzip 压缩 | npm i compression |
const morgan = require('morgan');
const cors = require('cors');
const helmet = require('helmet');
app.use(helmet());
app.use(cors());
app.use(morgan('dev'));
app.use(express.json());
思考题
- 如果中间件 A 不调用
next(),中间件 B 会被执行吗? - 如何优雅地处理未捕获的 Promise rejection?
- Express 和 Koa 的中间件模型有什么区别?(洋葱模型 vs 线性管道)