Express中间件彻底讲透:5种中间件类型与执行顺序(Backend-NodeJS-Golang-Interview_QA高频面试题)
【免费下载链接】Backend-NodeJS-Golang-Interview_QAA collection of Node JS and Golang Backend interview questions please feel free to fork and contribute to this repository项目地址: https://gitcode.com/gh_mirrors/ba/Backend-NodeJS-Golang-Interview_QA
如果你是 Node.js 后端开发者,面试时几乎绕不开Express中间件这个话题。它既是 Express 的灵魂,也是最容易答不完整的考点。本文结合开源项目 Backend-NodeJS-Golang-Interview_QA 中收录的高频面试题,用 10 分钟带你彻底搞懂 Express 中间件的 5 种类型、执行顺序和常见坑,看完就能从容应对面试官的连环追问 💪
一、Express中间件是什么?新手也能秒懂的定义
简单来说,中间件(Middleware)就是请求-响应循环中的"关卡"。一个请求从进入服务器到返回响应,会依次经过多个中间件函数,每个中间件都能:
- 执行任意代码(如日志、鉴权、数据校验)✅
- 修改请求对象
req和响应对象res✅ - 直接结束请求-响应循环(直接返回结果)✅
- 调用
next()把控制权交给下一个中间件 ✅
在 Backend-NodeJS-Golang-Interview_QA 的 README.md 中,这道原题(What are the tasks that a middleware can do?)的答案正是上面四点,面试时直接背下来就能拿分。
中间件处理请求时离不开req对象上的各种属性,比如req.params(路由参数)、req.query(查询字符串)、req.body(请求体)等,项目里这张图总结得非常清楚:
二、中间件执行顺序:洋葱模型的秘密
Express 中间件按注册顺序依次执行,就像剥洋葱 🧅——请求从外层一层层向内,响应再一层层向外。理解顺序,关键在于记住 3 条铁律:
- 先注册,先执行:
app.use()或app.get()的调用顺序就是执行顺序。 next()是接力棒:中间件只有调用next(),请求才会继续流向下一个中间件;不调用也不返回,请求就会"卡死"。- 错误处理中间件放最后:它必须声明在路由之后,才能兜住前面抛出的所有错误。
一个最简示例帮你建立直觉:
app.use((req, res, next) => { console.log('第1关:记录日志'); next(); // 传给下一关 }); app.get('/', (req, res) => { res.send('第2关:返回响应'); // 结束循环 });三、5种Express中间件类型逐一起底
这是 README.md 中的原题What are the different types of middleware?,标准答案是以下 5 种,一个都不能漏。
3.1 应用级中间件(Application-level middleware)
通过app.use()或app.METHOD()绑定到app实例上的中间件,作用于整个应用。比如全局日志、统一鉴权、请求体解析,几乎每个 Express 项目都会用:
app.use(express.json()); // 解析 JSON 请求体 app.use('/api', authCheck); // 所有 /api 开头的请求先过鉴权3.2 路由级中间件(Router-level middleware)
用express.Router()创建独立的路由模块,再通过router.use()挂载中间件。它和应用级中间件用法几乎一样,但只作用于该路由模块,非常适合把用户、订单等业务拆分成独立文件,代码更清爽。
3.3 错误处理中间件(Error-handling middleware)
唯一的区别是必须有 4 个参数(err, req, res, next),Express 靠参数个数识别它。集中处理所有错误,返回统一的错误 JSON,是生产环境的标配:
app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ message: '服务器开小差了~' }); });3.4 内置中间件(Built-in middleware)
Express 自带的中间件,无需额外安装,最常见的有:
express.static():托管静态资源(图片、CSS、JS)express.json():解析 JSON 格式的请求体express.urlencoded():解析表单提交的数据
比如托管public目录只需一行:app.use(express.static('public'))。
3.5 第三方中间件(Third-party middleware)
通过 npm 安装的社区中间件,生态极其丰富,面试常提的有:
| 中间件 | 用途 |
|---|---|
cors | 解决跨域问题 |
express-session | 会话管理 |
morgan | HTTP 请求日志 |
multer | 文件上传 |
以 CORS 为例,app.use(cors())一行即可开启跨域,README 中也有完整示例。
四、一张表记住5种中间件类型与执行顺序
| 类型 | 挂载方式 | 作用范围 | 典型场景 |
|---|---|---|---|
| 应用级 | app.use() | 整个应用 | 日志、鉴权、解析 body |
| 路由级 | router.use() | 指定路由模块 | 按业务拆分模块 |
| 错误处理 | 4 个参数 | 全局兜底 | 统一错误响应 |
| 内置 | Express 自带 | 全局 | 静态资源、JSON 解析 |
| 第三方 | npm 安装 | 全局或局部 | CORS、Session、上传 |
记忆口诀:应用管全局、路由管模块、错误收尾、内置白送、第三方按需装✍️
五、高频面试题速查:这样回答稳拿分
面试官最爱围绕中间件追问的 3 个问题,给你标准回答思路:
- "中间件能做什么?"→ 背熟本文第一部分那 4 点任务清单。
- "有哪些类型的中间件?"→ 5 种类型逐一列出,每种补一个例子更显功底。
- "如果中间件不调用 next() 会怎样?"→ 请求会一直挂起,直到超时;若已发送响应则请求结束,后续中间件不再执行。
六、总结
Express中间件是后端面试绕不开的核心考点:记住 5 种类型(应用级、路由级、错误处理、内置、第三方),理解next()串联出的执行顺序,再背熟 README 中那两道原题答案,这部分基本就稳了。想系统刷完 Node.js 与 Go 的后端面试题,可以git clone https://gitcode.com/gh_mirrors/ba/Backend-NodeJS-Golang-Interview_QA把整个题库拉下来逐题过一遍,配合文中的图片与示例,复习效率翻倍 🚀
【免费下载链接】Backend-NodeJS-Golang-Interview_QAA collection of Node JS and Golang Backend interview questions please feel free to fork and contribute to this repository项目地址: https://gitcode.com/gh_mirrors/ba/Backend-NodeJS-Golang-Interview_QA
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考