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

Node.js中catch捕获错误时err.code总是undefined,如何正确获取错误码?

核心原因

你测试的两个报错都属于ECMAScript标准定义的内置通用错误,这类错误的标准属性只有name、message、stack,没有规范code字段,因此打印err.code会返回undefined。code是Node.js为内置模块操作错误、系统运行时错误额外添加的专属属性,仅在特定场景下的错误实例中存在。


解决方案

  • 方案1:使用标准err.name区分错误类型
    你给出的测试代码可以修改为读取name属性做错误分类,完全可以满足通用场景需求:
try {
  const f = 4;
  f = 9;
} catch (err) {
  console.log(err.name); // 输出 TypeError
  console.log(err.message);
}

try {
  d = 12;
} catch (err) {
  console.log(err.name); // 输出 ReferenceError
  console.log(err.message);
}

常见的内置错误name包括TypeError、ReferenceError、RangeError、SyntaxError等,覆盖了绝大多数通用语法、逻辑错误场景。

  • 方案2:自定义错误时主动添加code属性
    如果是业务逻辑中主动抛出的错误,你可以手动给Error实例添加code字段,方便后续捕获时做定向处理:
try {
  const user = {}
  if (!user.id) {
    const err = new Error('用户id缺失')
    err.code = 'USER_ID_EMPTY'
    throw err
  }
} catch (err) {
  console.log(err.code) // 输出 USER_ID_EMPTY
  console.log(err.message)
}
  • 方案3:Node.js内置模块错误直接读取code
    当你调用Node.js的fs、http、child_process等内置模块触发错误时,返回的错误实例默认携带code属性,不需要额外处理就能直接读取:
const fs = require('fs')
try {
  fs.readFileSync('./不存在的文件.txt')
} catch (err) {
  console.log(err.code) // 输出 ENOENT
  console.log(err.message)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:00