MST

星途 面试题库

面试题:Node.js Express 错误处理中间件的设计与实现

假设你正在开发一个 Express 应用,要求设计并实现一个通用的错误处理中间件,该中间件需要能够区分不同类型的错误(如系统错误、业务逻辑错误),并针对每种类型的错误返回合适的 HTTP 状态码和错误信息。请描述实现思路并给出关键代码示例。
12.1万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 捕获错误:在 Express 应用中,使用 app.use((err, req, res, next) => {}) 这种形式的中间件来捕获所有未处理的错误。
  2. 区分错误类型:通过自定义错误类或者在错误对象上添加标识属性来区分系统错误和业务逻辑错误。
  3. 返回合适响应:根据不同的错误类型,设置合适的 HTTP 状态码和错误信息返回给客户端。

关键代码示例

// 自定义业务逻辑错误类
class BusinessLogicError extends Error {
  constructor(message) {
    super(message);
    this.name = 'BusinessLogicError';
  }
}

// 错误处理中间件
app.use((err, req, res, next) => {
  let statusCode = 500;
  let errorMessage = 'Internal Server Error';

  if (err instanceof BusinessLogicError) {
    statusCode = 400;
    errorMessage = err.message;
  } else if (err.name === 'ValidationError') {
    statusCode = 422;
    errorMessage = err.message;
  }

  res.status(statusCode).json({
    error: errorMessage
  });
});