前端/移动开发面试题更新 2026-08-05

在 Express(Node.js 框架)中,应用级中间件、路由级中间件以及错误处理中间件分别通过怎样的注册方式来实现?请说明它们的典型用法和区别。

前端/移动开发技术原理ExpressNode.js

考察说明

考查对 Express 中间件机制的理解,包括不同级别中间件的注册方式、执行时机和错误处理流程。

回答思路

  1. 【回答框架 1】中间件本质是函数,通过 app.use()、app.METHOD() 或 router.use()、router.METHOD() 注册,按顺序执行,通过 next() 传递控制权。应用级中间件通过 app.use() 挂载到整个应用,路由级中间件通过 router.use() 或 router.METHOD() 挂载到特定路由。
  2. 【回答框架 2】错误处理中间件必须声明四个参数 (err, req, res, next),且必须放在所有路由之后,用于捕获前面中间件或路由中通过 next(err) 传递的错误。
  3. 【回答框架 3】应用级中间件适用于全局逻辑(如日志、解析请求体、认证),路由级中间件适用于特定路由的预处理(如校验参数、权限控制)。
  4. 【回答框架 4】在执行流程上,中间件按注册顺序执行,若当前中间件不结束响应,则需调用 next() 将控制权传给下一个匹配的中间件或路由;错误处理中间件则专门处理错误,通过 next(err) 触发,最终返回错误响应。
  5. 【关键点 1】应用级中间件通过 app.use() 注册,作用于所有请求或特定路径前缀。
  6. 【关键点 2】路由级中间件通过 router.use() 或 router.METHOD() 注册,作用于该路由实例的请求。
  7. 【关键点 3】错误处理中间件有四个参数 (err, req, res, next),必须放在路由之后。
  8. 【易错点 1】错误处理中间件若不声明四个参数,会被当作普通中间件,无法捕获错误。
  9. 【易错点 2】中间件顺序不当可能导致逻辑不生效,例如未调用 next() 会阻塞后续处理。
  10. 【易错点 3】错误处理中间件必须显式调用 next(err) 才能触发,否则错误会被忽略。