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

在使用 Express 框架开发 Node.js 应用时,应当通过怎样的方式来定制错误处理页面?请说明具体的实现步骤与机制。

前端/移动开发编码实现技术原理问题排查ExpressNode.js

考察说明

考查对 Express 错误处理中间件机制的理解以及自定义错误页面的实践能力。

回答思路

  1. 【回答框架 1】Express 中自定义错误页面主要依赖错误处理中间件,其特点是拥有四个参数(err, req, res, next),通过 app.use 注册在路由之后。当任何路由或中间件调用 next(err) 或抛出异常时,Express 会自动跳过常规中间件,将错误信息传递给这个专用处理器。
  2. 【回答框架 2】在错误处理中间件中,可以检查 err.status 或 err.message 等属性,根据错误类型或状态码决定返回自定义的 HTML 页面、JSON 数据或重定向。例如,对于 404 错误,可以设置 res.status(404).sendFile('404.html');对于 500 错误,则返回 500 页面。
  3. 【回答框架 3】为了捕获所有未匹配的路由,可以在所有路由定义后添加一个普通中间件,调用 next(createError(404)) 将 404 错误传递给错误处理器。同时,在应用入口处(如 app.js)的最后添加自定义错误处理中间件,并确保它带有四个参数,否则 Express 不会将其视为错误处理器。
  4. 【回答框架 4】对于生产环境,需要隐藏详细错误堆栈,可以判断 NODE_ENV 环境变量,只在开发环境下将 error.stack 输出到页面,生产环境则记录日志并返回通用错误页。
  5. 【关键点 1】错误处理中间件必须声明四个参数(err, req, res, next),否则 Express 会将其视为普通中间件。
  6. 【关键点 2】通过 app.use 在路由之后注册错误处理中间件,并用 next(createError(404)) 捕获未匹配路由。
  7. 【关键点 3】根据错误状态码或属性区分错误类型,使用 res.status().sendFile() 或 res.render() 返回自定义页面。
  8. 【易错点 1】错误处理中间件参数个数错误会导致无法捕获错误,必须保留四个参数。
  9. 【易错点 2】在错误处理中间件中处理请求时,后续错误无法再次捕获,需避免在过程中抛出未处理的异常。
  10. 【易错点 3】生产环境直接返回错误堆栈会泄露敏感信息,应通过环境变量控制是否输出。