当前位置: 首页 > news >正文

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.cookiesCookie(需 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)

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

七、学习资源

  • Express 官方文档

  • Express 中间件列表

  • Express 最佳实践

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

相关文章:

  • Day22打卡-复习
  • PHP编写图书信息爬虫程序
  • 跨域问题深度解析与解决方案
  • rbac模型详解
  • Go语言多线程爬虫与代理IP反爬
  • 【Java继承】——面向对象编程的基石
  • 从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
  • 互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
  • 鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
  • yarn workspace使用指南
  • 精品可编辑PPT | 全面风险管理信息系统项目建设风控一体化标准方案
  • 数据库实验报告 SQL SERVER 2008的基本操作 1
  • 企业对数据集成工具的需求及 ETL 工具工作原理详解
  • 一键生成达梦、Oracle、MySQL 数据库 ER 图!解锁高效数据库设计!
  • 《基于 Kubernetes 的 WordPress 高可用部署实践:从 MariaDB 到 Nginx 反向代理》
  • PostgreSQL 序列(Sequence) 与 Oracle 序列对比
  • springboot集成langchain4j实现票务助手实战
  • 视觉-语言-动作模型:概念、进展、应用与挑战(上)
  • 基于Django和机器学习实现的中风预测系统
  • web 自动化之 selenium 下拉鼠标键盘文件上传
  • 世界期待中美对话合作带来更多确定性和稳定性
  • 宁德时代港股募资预计最高至50亿美元:90%将投向匈牙利项目
  • 湖南湘西州副州长刘冬生主动交代问题,接受审查调查
  • 第一集丨《亲爱的仇敌》和《姜颂》,都有耐人寻味的“她”
  • 沃旭能源因成本上升放弃英国海上风电项目,或损失近40亿元
  • 2025年上海市模范集体、劳动模范和先进工作者名单揭晓