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

Node.js使用node-fetch如何判断响应为JSON或Text格式避免解析报错

报错核心原因

res.json() 会消费响应的可读流,一旦解析失败触发catch,此时流已经被部分读取,再调用res.text()无法拿到完整的响应内容,所以会报错。

解决方案

提供两种可按需选择的实现:

方案1:通过响应头判断(推荐,性能更高)

如果对接的接口规范,优先通过Content-Type响应头判断格式,无额外性能开销:

const fetch = require("node-fetch");

const doFetch = async (url) => {
  try {
    const res = await fetch(url);
    const contentType = res.headers.get('content-type');
    // 匹配json类型的响应头
    if (contentType?.includes('application/json')) {
      return await res.json();
    }
    // 其他场景统一返回文本
    return await res.text();
  } catch (error) {
    console.log('fetch error', error.message);
  }
}

方案2:硬兜底解析(兼容不规范接口)

如果接口返回的Content-Type不符合规范,需要强制尝试解析的场景,先克隆响应流再试解析:

const fetch = require("node-fetch");

const doFetch = async (url) => {
  try {
    const res = await fetch(url);
    // 克隆响应流用于尝试json解析,不消耗原响应流
    const resClone = res.clone();
    try {
      return await resClone.json();
    } catch (err) {
      // 解析失败用未消耗的原响应流读取文本
      return await res.text();
    }
  } catch (error) {
    console.log('fetch error', error.message);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:30:03