目录
[1. 项目初始化](#1. 项目初始化)
[2. 基础服务搭建](#2. 基础服务搭建)
[3. 添加热更新](#3. 添加热更新)
[1. 路由系统](#1. 路由系统)
[2. 中间件机制](#2. 中间件机制)
[3. 模板引擎集成](#3. 模板引擎集成)
[1. 项目结构规范](#1. 项目结构规范)
[2. 错误处理方案](#2. 错误处理方案)
[3. 安全防护配置](#3. 安全防护配置)
[1. 集群模式](#1. 集群模式)
[2. 缓存优化](#2. 缓存优化)
[3. 压缩响应](#3. 压缩响应)
[1. 开发调试技巧](#1. 开发调试技巧)
[2. PM2生产部署](#2. PM2生产部署)
[3. 健康检查端点](#3. 健康检查端点)
Express作为Node.js最流行的Web框架,承载了超过60%的Node.js Web应用。本文将深入讲解其核心功能、最佳实践和性能优化技巧,并附带TypeScript支持方案。
一、Express快速入门
1. 项目初始化
bash
mkdir express-demo && cd express-demo
npm init -y
npm install express @types/express typescript ts-node-dev -D
2. 基础服务搭建
TypeScript
// src/app.ts
import express from 'express';
const app = express();
const port = 3000;
// 基础路由
app.get('/', (req, res) => {
res.send('Hello Express!');
});
// 启动服务
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
3. 添加热更新
TypeScript
// package.json
"scripts": {
"dev": "ts-node-dev --respawn src/app.ts"
}
二、核心功能详解
1. 路由系统
动态路由参数
TypeScript
app.get('/users/:userId/posts/:postId', (req, res) => {
const { userId, postId } = req.params;
res.json({ userId, postId });
});
路由模块化
TypeScript
// routes/userRoutes.ts
import { Router } from 'express';
const router = Router();
router.get('/', (req, res) => {
res.send('User list');
});
export default router;
// 主文件
import userRouter from './routes/userRoutes';
app.use('/users', userRouter);
2. 中间件机制
自定义中间件
TypeScript
// 日志中间件
const logger = (req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
};
app.use(logger);
常用官方中间件
TypeScript
app.use(express.json()); // 解析JSON请求体
app.use(express.urlencoded({ extended: true })); // 解析表单数据
app.use(express.static('public')); // 静态文件服务
3. 模板引擎集成
bash
npm install ejs
TypeScript
// 配置视图引擎
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
// 渲染页面
app.get('/about', (req, res) => {
res.render('about', { title: '关于我们' });
});
三、企业级最佳实践
1. 项目结构规范
复制
src/
├── config/ # 配置文件
├── controllers/ # 控制器
├── routes/ # 路由
├── middleware/ # 自定义中间件
├── models/ # 数据模型
├── utils/ # 工具函数
├── views/ # 模板文件
└── app.ts # 入口文件
2. 错误处理方案
TypeScript
// 统一错误处理中间件
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
code: 500,
message: process.env.NODE_ENV === 'production'
? '服务器错误'
: err.message
});
});
// 异步错误捕获
import 'express-async-errors';
app.get('/async', async (req, res) => {
const data = await fetchData();
res.json(data);
});
3. 安全防护配置
bash
npm install helmet cors
TypeScript
import helmet from 'helmet';
import cors from 'cors';
app.use(helmet());
app.use(cors({
origin: ['https://yourdomain.com'],
methods: ['GET', 'POST']
}));
四、性能优化策略
1. 集群模式
TypeScript
import cluster from 'cluster';
import os from 'os';
if (cluster.isPrimary) {
const cpuCount = os.cpus().length;
for (let i = 0; i < cpuCount; i++) {
cluster.fork();
}
} else {
app.listen(3000);
}
2. 缓存优化
TypeScript
// 路由缓存示例
app.get('/api/products',
(req, res, next) => {
const cacheKey = req.originalUrl;
const cachedData = redisClient.get(cacheKey);
if (cachedData) {
return res.json(JSON.parse(cachedData));
}
next();
},
async (req, res) => {
const data = await fetchFromDB();
redisClient.setEx(cacheKey, 3600, JSON.stringify(data));
res.json(data);
}
);
3. 压缩响应
bash
npm install compression
TypeScript
import compression from 'compression';
app.use(compression());
五、调试与部署
1. 开发调试技巧
TypeScript
// package.json
"scripts": {
"debug": "node --inspect -r ts-node/register src/app.ts"
}
2. PM2生产部署
bash
npm install pm2 -g
pm2 start dist/app.js -i max
3. 健康检查端点
TypeScript
app.get('/health', (req, res) => {
res.json({
status: 'UP',
timestamp: Date.now(),
uptime: process.uptime()
});
});
六、扩展生态推荐
中间件 | 作用 | 安装命令 |
---|---|---|
morgan | 请求日志记录 | npm install morgan |
express-validator | 参数校验 | npm install express-validator |
swagger-ui-express | API文档生成 | npm install swagger-ui-express |
rate-limit | 请求频率限制 | npm install express-rate-limit |
延伸学习路径:
-
官方文档:Express中文文档
-
安全实践:OWASP Node.js安全指南
-
性能优化:Node.js性能优化手册