Express知识框架

发布于:2025-05-13 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、核心概念

1. Express 简介

  • Node.js 的 Web 框架,提供 HTTP 服务器封装

  • 轻量级但灵活,支持中间件扩展

  • 基于路由,支持 RESTful API 和传统 MVC 架构

  • 无内置 ORM 或模板引擎,但可集成第三方库

2. 核心对象

  • express() - 创建 Express 应用

  • app (Application 对象) - 管理全局中间件、路由、服务器

  • req (Request 对象) - 封装 HTTP 请求信息

  • res (Response 对象) - 封装 HTTP 响应方法

  • router (Router 对象) - 模块化路由管理


二、核心功能

1. 路由系统

(1) 基本路由
app.METHOD(path, handler)  // GET, POST, PUT, DELETE, etc.
app.all(path, handler)     // 匹配所有 HTTP 方法
app.route(path)            // 链式路由定义
(2) 路由参数
app.get('/users/:id', (req, res) => {
  const userId = req.params.id;  // 获取动态参数
});
(3) 查询字符串
app.get('/search', (req, res) => {
  const query = req.query.q;  // /search?q=express
});
(4) 模块化路由 (Router)
const router = express.Router();
router.get('/', (req, res) => { ... });
app.use('/api', router);  // 挂载到 /api 路径

2. 中间件(Middleware)

(1) 基本概念
  • 函数签名(req, res, next) => { ... }

  • 执行顺序:按 app.use() 顺序执行

  • 作用:修改请求/响应、执行额外逻辑、终止请求

(2) 中间件类型
类型 示例 说明
应用级 app.use(logger) 全局中间件
路由级 router.use(auth) 路由专属中间件
错误处理 (err, req, res, next) 捕获错误
内置 express.json() 解析 JSON
第三方 morgan 日志记录
(3) 常用内置中间件
app.use(express.json());          // 解析 JSON 请求体
app.use(express.urlencoded());    // 解析表单数据
app.use(express.static('public')); // 静态文件服务
(4) 自定义中间件示例
const logger = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();  // 继续执行后续中间件
};
app.use(logger);

3. 请求与响应处理

(1) Request (req) 常用属性/方法
属性/方法 说明
req.params 路由参数 (/users/:id)
req.query 查询参数 (?name=express)
req.body 请求体(需 body-parser
req.headers 请求头
req.cookies Cookie(需 cookie-parser
(2) Response (res) 常用方法
方法 说明
res.send() 发送响应(自动设置 Content-Type)
res.json() 发送 JSON
res.status() 设置状态码
res.redirect() 重定向
res.render() 渲染模板(需模板引擎)
res.sendFile() 发送文件
res.set() 设置响应头

4. 模板引擎(可选)

(1) 常用引擎
  • EJS(嵌入式 JS)

  • Pug(缩进语法)

  • Handlebars(Mustache 风格)

(2) 配置示例
app.set('views', './views');  // 模板目录
app.set('view engine', 'ejs'); // 使用 EJS
app.get('/', (req, res) => {
  res.render('index', { title: 'Express' }); // 渲染模板
});

三、高级功能

1. 错误处理

(1) 基本错误处理
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Server Error!');
});
(2) 异步错误处理
app.get('/', async (req, res, next) => {
  try {
    await someAsyncOperation();
  } catch (err) {
    next(err);  // 传递给错误处理中间件
  }
});

2. 静态文件服务

app.use(express.static('public'));  // 访问 public/ 目录
app.use('/static', express.static('files'));  // 自定义路径

3. Cookie & Session 管理

(1) Cookie
const cookieParser = require('cookie-parser');
app.use(cookieParser());
res.cookie('name', 'value', { maxAge: 900000 });
req.cookies.name;  // 读取 Cookie
(2) Session
const session = require('express-session');
app.use(session({ secret: 'keyboard cat', resave: false }));
req.session.user = { name: 'John' };  // 设置 Session

4. 文件上传

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
  console.log(req.file);  // 文件信息
});

四、安全最佳实践

1. 安全中间件

const helmet = require('helmet');
app.use(helmet());  // 设置安全 HTTP 头

2. CORS 处理

const cors = require('cors');
app.use(cors());  // 允许跨域请求

3. CSRF 防护

const csrf = require('csurf');
app.use(csrf({ cookie: true }));

4. 速率限制

const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });
app.use(limiter);

五、部署与优化

1. 生产环境配置

  • 使用 NODE_ENV=production

  • 启用压缩 (compression 中间件)

  • 反向代理(Nginx/Apache)

  • 日志管理(morgan + winston

2. 进程管理(PM2)

pm2 start app.js --name "express-server" --watch

六、总结对比(Express vs Koa vs NestJS)

特性 Express Koa NestJS
中间件模型 线性执行 洋葱圈 模块化 + 依赖注入
异步处理 回调 async/await async/await
内置功能 较少 极少 丰富(ORM、微服务等)
适用场景 传统 Web 服务 轻量级 API 企业级应用

七、学习资源

Express 是 Node.js 最流行的 Web 框架,适合快速开发 API 和传统 Web 应用。掌握其核心概念(路由、中间件、请求/响应)后,可结合各种中间件扩展功能。


网站公告

今日签到

点亮在社区的每一天
去签到