如何在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
相关产品推荐
相关产品推荐

