Express知识框架

一、核心概念

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'));  // 自定义路径
复制代码
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 应用。掌握其核心概念(路由、中间件、请求/响应)后,可结合各种中间件扩展功能。

相关推荐
MaisieKim_3 小时前
python与nodejs哪个性能高
前端·python·node.js
水煮白菜王4 小时前
深入理解 Webpack 核心机制与编译流程
前端·webpack·node.js
大G哥5 小时前
项目中利用webpack的require.context实现批量引入/导入图片
前端·webpack·node.js
七冬与小糖1 天前
【本地搭建npm私服】使用Verdaccio
前端·npm·node.js
巴巴_羊1 天前
webpack和vite区别
前端·webpack·node.js
亦世凡华、1 天前
前端npm包发布流程:从准备到上线的完整指南
前端·经验分享·npm·node.js·npm发包
X01动力装甲1 天前
Node.js 24.0 正式发布:性能跃升与开发体验全面升级
node.js
q567315231 天前
Node.js数据抓取技术实战示例
爬虫·python·scrapy·node.js
巴巴_羊1 天前
yarn npm pnpm
前端·npm·node.js