Node系列 · Express:常用的中间件
Node系列 · Express常用的中间件Express 的核心能力只有路由和中间件机制——所有开箱即用的功能都是中间件实现的。本章盘点最常用的几个内置和第三方中间件。一、内置中间件Express 自带1.1express.static静态资源服务把指定目录的文件对外暴露成 HTTP 静态资源app.use(express.static(public)); app.use(express.static(files)); // 多个目录按顺序查找├── index.html ├── style.css └── images/logo.png$curlhttp://localhost:3000/index.html $curlhttp://localhost:3000/style.css $curlhttp://localhost:3000/images/logo.png::: tip生产环境用 Nginx / CDN 提供静态资源——Express 静态中间件适合本地开发和内部工具高并发场景 Nginx 性能更好。:::虚拟路径前缀app.use(/static, express.static(public)); // 访问 /static/style.css → public/style.css1.2express.urlencoded解析表单 POSTapp.use(express.urlencoded({ extended: false })); // 接收表单提交nameAliceage25 app.post(/login, (req, res) { console.log(req.body); // { name: Alice, age: 25 } res.send(ok); });extended: false用querystring库解析只支持字符串extended: true用qs支持嵌套对象。1.3express.json解析 JSON POSTapp.use(express.json({ limit: 1mb })); // 接收 JSON{name:Alice,age:25} app.post(/api/users, (req, res) { console.log(req.body); // { name: Alice, age: 25 } res.json({ id: 1 }); });参数默认值说明limit100kb请求体最大体积防 OOMstricttrue只接受对象 / 数组不接收字符串 / nulltypeapplication/jsonContent-Type 匹配规则二、第三方中间件2.1morganHTTP 请求日志npminstallmorganconst morgan require(morgan); app.use(morgan(dev)); // 开发彩色简洁 app.use(morgan(combined)); // 生产Apache 风格详细输出示例:method :url :status :res[content-length] - :response-time ms GET /api/users 200 42 - 12 ms格式用途combined生产详细common生产中等dev开发彩色short最简洁tiny比short更短写文件const fs require(fs); const accessLog fs.createWriteStream(access.log, { flags: a }); app.use(morgan(combined, { stream: accessLog }));2.2cors跨域npminstallcorsconst cors require(cors); // 允许所有跨域开发期 app.use(cors()); // 只允许特定源 app.use(cors({ origin: [https://example.com, https://admin.example.com], credentials: true, // 允许携带 Cookie }));详见 第 11 章 cors 中间件。2.3helmet安全头npminstallhelmetconst helmet require(helmet); app.use(helmet());一行给响应加上 11 个安全相关的 HTTP 头X-Content-Type-Options: nosniff防 MIME 嗅探X-Frame-Options: SAMEORIGIN防点击劫持Strict-Transport-Security强制 HTTPSX-XSS-ProtectionXSS 防护等::: tip所有生产 Express 项目都建议加helmet()——一行代码解决大量安全问题。:::2.4compressionGzip 压缩npminstallcompressionconst compression require(compression); app.use(compression());自动给响应体做 gzip 压缩——文本响应HTML / JSON大小可减少 60-80%。2.5cookie-parser解析 Cookienpminstallcookie-parserconst cookieParser require(cookie-parser); app.use(cookieParser(my-secret)); app.get(/set, (req, res) { res.cookie(token, abc123, { httpOnly: true }); res.send(ok); }); app.get(/get, (req, res) { console.log(req.cookies); // { token: abc123 } res.json(req.cookies); });2.6multer文件上传npminstallmulterconst multer require(multer); const upload multer({ dest: uploads/ }); app.post(/api/upload, upload.single(avatar), (req, res) { console.log(req.file); // { // fieldname: avatar, // originalname: photo.jpg, // encoding: 7bit, // mimetype: image/jpeg, // destination: uploads/, // filename: xxx-xxxx.jpg, // path: uploads/xxx-xxxx.jpg, // size: 12345 // } res.json({ url: /uploads/${req.file.filename} }); });2.7express-rate-limit限流npminstallexpress-rate-limitconst rateLimit require(express-rate-limit); const limiter rateLimit({ windowMs: 60 * 1000, // 1 分钟 max: 100, // 最多 100 次请求 message: 请求过于频繁请稍后再试, }); app.use(/api, limiter);防爬虫、防爆破登录接口。三、中间件选型速查场景中间件静态资源express.static解析 JSON bodyexpress.json解析表单 bodyexpress.urlencodedHTTP 日志morgan跨域cors安全头helmetGzipcompressionCookiecookie-parser文件上传multer限流express-rate-limitSessionexpress-session详见 sessionJWTjsonwebtoken详见 JWT四、最佳实践场景推荐生产环境必须helmetcompressioncors开发环境morgan(dev)body 解析express.jsonexpress.urlencoded静态资源开发用内置生产用 Nginx限流公开接口必加防爆破、防爬虫文件上传限制大小如limits: { fileSize: 5 * 1024 * 1024 }五、小结express.static提供静态资源服务express.json/express.urlencoded解析请求体第三方必备三件套morgan日志helmet安全compression压缩文件上传用multer限流用express-rate-limit生产环境最少要helmetcompressioncorsmorgan body 解析器中间件按app.use()顺序执行通用中间件在前业务路由在后

相关新闻

字节跳动2018校招算法笔试:从KMP到XGBoost考点全解析

字节跳动2018校招算法笔试:从KMP到XGBoost考点全解析

字节跳动2018校招算法方向(第三批)这场笔试,我印象还挺深的。当时算法岗的竞争已经非常激烈,第三批笔试的题量和难度都比前两批有所升级,题目覆盖了从基础数据结构到机器学习、深度学习的完整知识链。很多人只刷LeetCo…

2026/11/12 0:01:24 阅读更多 →
软件测试八股文面试攻略:高频考点与备考技巧

软件测试八股文面试攻略:高频考点与备考技巧

说出来你可能不信,这两年软件测试岗的面试,已经卷到“八股文背不熟,简历都不好意思投”的地步。我身边不少测开、功能测试的老同事跳槽大厂,第一轮技术面就被连环追问打得措手不及——不是项目经验不行,是那些“看起来…

2026/11/9 17:25:19 阅读更多 →
第十一章 普通财务从业者的生存与破局——在AI时代守住底线

第十一章 普通财务从业者的生存与破局——在AI时代守住底线

某跨国公司的财务主管林薇收到了一封来自“首席财务官”的紧急邮件。邮件语气急促,要求她立即批准一笔大额跨境付款,附件中附带了一份格式规范的采购合同和一张金额匹配的发票。邮件措辞专业、格式标准,合同和发票看起来“完美无瑕”——字体…

2026/11/2 8:08:56 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻