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')); // 自定义路径
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 官方文档
-
Express 中间件列表
-
Express 最佳实践
Express 是 Node.js 最流行的 Web 框架,适合快速开发 API 和传统 Web 应用。掌握其核心概念(路由、中间件、请求/响应)后,可结合各种中间件扩展功能。
相关文章:
Express知识框架
一、核心概念 1. Express 简介 Node.js 的 Web 框架,提供 HTTP 服务器封装 轻量级但灵活,支持中间件扩展 基于路由,支持 RESTful API 和传统 MVC 架构 无内置 ORM 或模板引擎,但可集成第三方库 2. 核心对象 express() - 创建…...

uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图)
uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图) 代码示下,不再赘述。 动作面板组件:https://nutui-uniapp.netlify.app/components/feedback/actionsheet.html 项目背景 业务需求 描述: uniapp + vue3 + 京东Nut框架:实现登录弹框组…...

C++类和对象--中阶
C类和对象中阶 01. 类的6个默认成员函数 在 C 中,类有 6 个特殊的默认成员函数(不是 6 个构造函数),它们会在特定情况下由编译器自动生成。包括构造函数,析构函数,拷贝构造和赋值运算符重载,取…...
OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)详解
OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)通过限制LSA的传播来优化网络性能,减少路由表规模。以下是它们的核心区别: 1. Stub 区域(末梢区域) 允许的LSA类型:Type 1-3&#…...

数据签名在区块链中的独特应用与挑战
随着信息技术的飞速发展,分布式系统因其高效、可靠、可扩展等显著优点,在众多领域得到了极为广泛的应用。分布式系统通过网络将多个独立的计算节点连接在一起,协同完成复杂的任务,这种架构使得系统具备了强大的容错能力和负载均衡…...

数据可视化大屏——物流大数据服务平台(二)
代码分析: 物流大数据平台代码分析 这是一个基于 Bootstrap 和 ECharts 构建的物流大数据平台前端页面,设计采用了经典的三栏布局,主要展示河南省及全国的物流数据可视化内容。下面从多个维度进行分析: 1. 页面结构分析 整体采…...
5倍无损压缩+50 倍速转换HD Video 4K/8K 视频处理
各位视频处理小达人们,我跟你们说啊!有个超厉害的专业视频处理软件,叫HD Video Converter Factory Pro,简称HDVC,是WonderFox公司开发的。这软件功能老强大了,下面我给你们详细唠唠! 先说说它的…...
Vue学习百日计划-Deepseek版
阶段1:基础夯实(Day 1-30) 目标:掌握HTML/CSS/JavaScript基础,理解Vue核心概念和基础语法。 每日学习内容(2小时): HTML/CSS(Day 1-10) 学习HTML标签语义化…...

Maven 处理依赖冲突
Maven处理依赖冲突 什么是依赖冲突?如何解决?Maven自动处理依赖冲突的规则路径优先原则第一声明优先原则注意 子模块覆盖父模块父模块声明dependency子模块覆盖dependency父模块声明dependencyManagement 子模块覆盖dependency父模块声明dependencyManag…...

5.12第四次作业
实验要求:完成上图内容,要求五台路由器的环回地址均可以相互访问 AR1 AR2 AR3 AR4 AR5 AS 200 ospf配置 AR2 AR3 AR4 BGP配置 AR1(AS100) AR2(AS200) AR4 AR5(AS300) 结果...

【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决
在Vivado中在always块中写逻辑时如果出现always块中的异步复位敏感词在块内部未使用的情况,如下例的rst: always (posedge clk or posedge rst) begin if(~tx_sense_flag)o_rd_adr < d1;else if((o_rd_adr d94) & (bit_cnt d7))o_rd_adr <…...

Go语言——kratos微服务框架使用
文章目录 一、安装依赖二、创建项目三、初始化项目四、使用git_bash命令终端运行命令五、创建自己的项目1、修改app.proto3、internal/service/app.go4、修改internal/service/service.go文件5、创建internal/biz/content.go文件6、修改internal/biz/biz.go文件7、创建internal…...
动作识别笔记
一些casual paper review 动作识别Input 从前:RGB,然后 RGB+2D pose 接着各种手工modalities,现在是纯pose 但是包含了 多人 interactive的pose Graph from skeleton verticies: keypoints,Edges: just joint btw keypoints一个训练的sample 是一个 panoramic graph, con…...

hiveserver2与beeline进行远程连接hive配置及遇到的问题
1、hiveserver2 参与用户模拟功能,因为开启后才能保证各用户之间的权限隔离。 1.1、配置 $HADOOP_HOME/etc/hadoop/core-site.xml <!--配置所有节点的root用户都可作为代理用户--> <property><name>hadoop.proxyuser.root.hosts</name>&…...

Stable Diffusion进阶之Controlnet插件使用
前面已经对Stable Diffusion的文生图和图生图的操作界面做了详细的介绍,接下来会介绍Stable Diffusion的进阶部分Controlnet插件的使用。往期文章详见: 爆肝整理!Stable Diffusion的完全使用手册(一)爆肝整理ÿ…...
解决vue create 创建项目,不能使用上下键选择模板的问题
使用 git bash 创建vue项目时候,无法使用上下键盘按键选择创建模板 处理: 1.当前界面,按CTR C终止创建命令; 2.使用 alias vuewinpty vue.cmd,更新命令环境; 3.再次使用 vue create demo创建项目…...

Multisim14使用教程详尽版--(2025最新版)
一、Multisim14前言 1.1、主流电路仿真软件 1. Multisim:NI开发的SPICE标准仿真工具,支持模拟/数字电路混合仿真,内置丰富的元件库和虚拟仪器(示波器、频谱仪等),适合教学和竞赛设计。官网:艾…...

使用Stable Diffusion(SD)中,步数(Steps)指的是什么?该如何使用?
Ⅰ定义: 在Stable Diffusion(SD)中,步数(Steps) 指的是采样过程中的迭代次数,也就是模型从纯噪声一步步“清晰化”图像的次数。你可以理解为模型在画这张图时“润色”的轮数。 Ⅱ步数的具体作…...
《Asp.net Mvc 网站开发》复习试题
一.选择题(注:每题2分,共 54分,只能在下列表格中,填写每个题目相应的正确字母选项) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: :27: 1. Mvc让软件…...

【se-res模块学习】结合CIFAR-10分类任务学习
继CIFAR-10图像分类:【Res残差连接学习】结合CIFAR-10任务学习-CSDN博客 再优化 本次训练结果在测试集上的准确率表现可达到90%以上 1.训练模型(MyModel.py) import torch import torch.nn as nnclass SENet(nn.Module): # SE-Net模块def…...

【C++设计模式之Template Method Pattern】
C设计模式之Template Method Pattern 模式定义核心思想动机(Motivation)结构(Structure)实现步骤应用场景要点总结 模式定义 模式定义: 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子…...
JVM对象头中的锁信息机制详解
JVM对象头中的锁信息机制详解 Java中的对象锁机制是高性能并发的基石,而这一切的底层实现都离不开对象头中的 Mark Word 字段。本文将系统梳理JVM对象头中锁信息的存储与演化机制,解析锁升级与批量重偏向优化原理,并通过JOL工具实战验证对象…...
Java设计模式之适配器模式:从入门到精通
适配器模式(Adapter Pattern)是Java中最常用的结构型设计模式之一,它像一座桥梁连接两个不兼容的接口,使得原本由于接口不兼容而不能一起工作的类可以协同工作。本文将全面深入地解析适配器模式,从基础概念到高级应用,包含丰富的代码示例、详细注释、使用场景分析以及多维对…...

英伟达Blackwell架构重构未来:AI算力革命背后的技术逻辑与产业变革
——从芯片暴力美学到分布式智能体网络,解析英伟达如何定义AI基础设施新范式 开篇:当算力成为“新石油”,英伟达的“炼油厂”如何升级? 2025年3月,英伟达GTC大会上,黄仁勋身披标志性皮衣,宣布了…...
【自定义指令】(el-table表格内容自动轮播)
// el-table 自动轮播 import { nextTick } from vue; export default {bind(el, binding) {const time binding.value?.time || 100;let speed binding.value?.speed || 1;const loop binding.value?.loop || true;const timeLoop binding.value?.timeLoop || true;co…...

深度拆解!MES如何重构生产计划与排产调度全流程?
☂引言 在制造业数字化转型浪潮中,生产计划与排产调度的精准性直接决定企业竞争力。深蓝易网MES系统通过智能化调度与全流程管控,帮助企业破解排产难题,实现资源高效协同与生产透明化管理,为制造企业打造柔性化、敏捷化的生产体系…...

信息系统项目管理师-软考高级(软考高项)2025最新(十八)
个人笔记整理---仅供参考 第十八章项目绩效域 18.1干系人绩效域 18.2团队绩效域 18.3开发方法和生命周期绩效域 18.5项目工作绩效域 18.6交付绩效域 18.7度量绩效域 18.8不确定绩效域...

UniDevTools - UniApp(前端app)调试工具使用
使用介绍 | UniDevTools 兼容框架: Vue2jsvuexVue3tsvuex(pinia)√√ 兼容平台: H5APP微信小程序APP-NVUE其他小程序UniAppX√√√√(大部分功能支持)未测试 (待办中) 下载安装 将下载好的源码解压至项目根目录,文件夹命名为 devTools …...
WebRTC工作原理详细介绍、WebRTC信令交互过程和WebRTC流媒体传输协议介绍
简介 WebRTC(Web Real-Time Communication)是一项允许在网页浏览器之间进行音视频通信的技术,基本不需要安装额外的插件。它的核心特点是支持低延迟的点对点(P2P)通讯,常用于视频聊天、实时文件共享、多人…...
Docker快速入门与应用
1. 什么是 Docker? Docker 就像一个“魔法箱子”,可以把你开发的应用(代码、环境、配置)打包成一个标准化的容器,这个容器可以在任何支持 Docker 的系统上运行,无需担心环境差异导致的问题。 类比…...