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

Fetch请求返回500状态码时无法读取响应的求助

解决Fetch捕获500错误时读取响应内容的问题

当你用Fetch调用接口遇到500状态码时,当前代码的问题在于:你reject的是未解析的Response对象,并没有读取它的响应体内容,因此无法直接获取到message属性。

下面提供两种可行的解决方法:

方法一:在reject前提前解析错误响应

fetch('your-api-endpoint')
  .then(response => {
    if (!response.ok) {
      // 先解析错误响应的JSON数据,再将解析结果reject出去
      return response.json().then(errorData => Promise.reject(errorData));
    }
    return response.json();
  })
  .then(data => {
    // 处理成功响应
    console.log(data);
  })
  .catch(error => {
    // 直接访问解析后的错误对象的message属性
    console.log(error.message); // 输出 "Test error"
  });

方法二:在catch中解析Response对象

fetch('your-api-endpoint')
  .then(response => {
    if (!response.ok) {
      return Promise.reject(response);
    }
    return response.json();
  })
  .then(data => {
    // 处理成功响应
    console.log(data);
  })
  .catch(error => {
    // 区分Response类型错误和其他错误(如网络故障)
    if (error instanceof Response) {
      // 解析响应体的JSON数据
      error.json().then(errorData => {
        console.log(errorData.message); // 输出 "Test error"
      });
    } else {
      console.log('非HTTP响应错误:', error);
    }
  });

注意事项

  • 如果接口返回的不是JSON格式,将response.json()替换为response.text()即可读取响应文本。
  • 方法二中,error.json()是异步操作,若需要基于错误内容执行后续逻辑,要注意异步流程的处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:01