You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中抛出带状态码的异常并正确捕获自定义属性?

抛出自定义参数错误的解决方案

方案1:自定义错误类(推荐,可维护性最高)

通过继承原生Error类实现自定义错误类型,可按需扩展任意属性,同时支持错误类型判断,是行业通用的最佳实践:

// 定义自定义错误类
class HttpError extends Error {
  constructor(message, statusCode, options = {}) {
    super(message, options);
    this.statusCode = statusCode;
    this.name = 'HttpError';
    // 兼容旧JS环境的堆栈捕获
    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, HttpError);
    }
  }
}

// 抛出错误
try {
  const found = undefined;
  if (found === undefined) {
    throw new HttpError('Page not found', 404);
  }
} catch (e) {
  // 可先判断错误类型再做对应处理
  if (e instanceof HttpError) {
    console.log(e.statusCode); // 输出 404
    console.log(e.message); // 输出 Page not found
  } else {
    // 其他类型错误的处理逻辑
  }
}

方案2:Object.assign快捷实现

如果不想单独定义类,可在抛出错误时直接通过Object.assign挂载自定义属性,适合轻量使用场景:

// 抛出错误
throw Object.assign(new Error('Page not found'), { statusCode: 404 });

// 捕获读取
try {
  // 业务逻辑
} catch (e) {
  console.log(e.statusCode); // 输出 404
}

原写法不生效的原因

原生Error构造函数的options参数目前仅支持标准的cause属性,传入的自定义字段不会自动挂载到错误实例上,且该参数兼容性有限,不建议用来传递自定义参数。

内容的提问来源于stack exchange,提问作者Run

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:21:02