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

Node.js Fetch请求中如何判断网络错误类型(如ENOTFOUND)

在Node.js中通过fetch捕获网络错误时正确判断错误类型

当你在Node.js中使用fetch发起请求遇到网络错误时,抛出的TypeError本身不会直接携带code属性,真正的错误码(比如ENOTFOUND)会嵌套在错误的cause属性里。要正确判断这类错误,可以按照以下方式处理:

步骤1:捕获并逐层解析错误

在try/catch块中捕获错误后,先检查错误的cause属性——网络相关的系统错误会被包装在这里面。

步骤2:判断错误类型和错误码

通过instanceof确保类型安全,再访问cause.code获取具体错误码,根据不同码值做针对性处理。

完整代码示例

async function fetchData(url) {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      // 处理HTTP状态码错误(如4xx、5xx)
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return await response.json();
  } catch (err) {
    // 处理网络类系统错误
    if (err instanceof TypeError && err.cause instanceof Error) {
      const systemError = err.cause;
      switch (systemError.code) {
        case 'ENOTFOUND':
          console.log('错误:目标域名无法解析');
          break;
        case 'ECONNREFUSED':
          console.log('错误:连接被拒绝');
          break;
        // 可扩展更多需要处理的错误码
        default:
          console.log(`未知网络错误:${systemError.code}`);
      }
    } else {
      // 处理其他类型错误(如HTTP状态错误、业务逻辑错误)
      console.log(err.message);
    }
  }
}

// 测试调用
fetchData('https://nonexistent.example.com');

补充说明

  • Node.js的fetch API会将底层系统错误(DNS解析失败、连接拒绝等)包装成TypeError,原始错误存入cause属性
  • 注意区分网络错误(请求未发送/连接失败)和HTTP状态错误(请求发送成功但返回非2xx状态码)
  • 若需统一处理所有错误,可优先检查err.cause是否存在,再处理系统级错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:03:13