如何在 React 中正确捕获并显示 Fetch 请求返回的 400 错误详情

冬婷小哥_4077

冬婷小哥_4077

2025-12-27

286人浏览

原创

如何在 React 中正确捕获并显示 Fetch 请求返回的 400 错误详情

当 react 使用 fetch 调用 api 遇到 400 响应时,需主动解析响应体(如 json)才能获取 `errordesc` 等自定义错误字段,而非仅依赖 `statustext`。

在 React 应用中,fetch 默认不会因 HTTP 错误状态(如 400、500)抛出异常,而是将 response.ok 设为 false。此时若直接调用 Promise.reject(response.statusText),会丢失响应体中的结构化错误信息(如 errorDesc),导致无法向用户展示精准的业务错误提示。

要正确提取后端返回的错误详情,关键在于:对非成功响应,先调用 response.json()(或 response.text())读取响应体,再基于解析结果渲染 Modal 或抛出定制错误。

以下是推荐的处理方式:

React 组件生成器
React 组件生成器

根据项目规范生成 React 和 Vue 组件,包括 TypeScript 类型定义、Ant Design 5 集成、Tailwind CSS 样式及 Vitest 测试文件。当用户提出创建、生成或搭建前端组件的需求时启用,例如:“帮我写一个表格组件”、“生成一个弹窗”、“create a form component”、“写一个列表页”、“生成一个下拉选择器”。该能力在以下任一场景触发:涉及 React/TSX/Vue 组件生成、UI 组件创建,或为组件生成测试文件。

下载
fetch(URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' }, // 注意:通常需设置 headers
  body: JSON.stringify(data) // 确保 data 已序列化(如为对象)
})
.then(response => {
  if (!response.ok) {
    // 统一处理错误响应:先解析 JSON,再使用业务字段
    return response.json().then(errorData => {
      const errorMsg = errorData.message || 'Request failed';
      const errorDetail = errorData.errorDesc || '';

      Modal.error({
        className: "ErrorModal",
        title: errorMsg,
        content: errorDetail,
      });

      // 可选:抛出自定义错误便于上层 catch 捕获(如触发状态更新)
      throw new Error(`${errorMsg}: ${errorDetail}`);
    });
  }
  return response.json();
})
.then(data => {
  // 处理成功响应
  console.log('Success:', data);
})
.catch(error => {
  console.error('API call failed:', error);
  // 此处可统一处理网络异常、JSON 解析失败、或上面 throw 的业务错误
});

✅ 关键要点说明:

  • response.json() 是一个异步操作,必须用 .then() 链式调用,不可在 if (!response.ok) 块内直接 return response.json() 后继续写同步逻辑;
  • 建议为 fetch 显式添加 headers 和序列化 body(尤其当后端期望 JSON);
  • 使用 errorData?.errorDesc 等可选链访问,增强健壮性,避免因响应格式不一致导致运行时错误;
  • 若错误响应可能不是 JSON(如纯文本或 HTML),可用 response.text() 替代,并手动 JSON.parse()(需包裹 try/catch);
  • throw new Error(...) 可让 .catch() 统一处理所有失败路径(包括网络错误、解析失败、业务错误),利于集中日志上报或状态管理。

通过该模式,你不仅能精准展示 "missing required first name field" 这类用户友好的字段级提示,还能保持代码清晰、可维护,并与现代 React 错误边界或状态管理方案良好集成。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

react html js json

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2215

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3522

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1176

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4059

7

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1029

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

3200

5

promise的用法
promise的用法

“promise” 是一种用于处理异步操作的编程概念,它可以用来表示一个异步操作的最终结果。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise的用法主要包括构造函数、实例方法(then、catch、finally)和状态转换。

2023.10.12

4660

6

html文本框类型介绍
html文本框类型介绍

html文本框类型有单行文本框、密码文本框、数字文本框、日期文本框、时间文本框、文件上传文本框、多行文本框等等。详细介绍:1、单行文本框是最常见的文本框类型,用于接受单行文本输入,用户可以在文本框中输入任意文本,例如用户名、密码、电子邮件地址等;2、密码文本框用于接受密码输入,用户在输入密码时,文本框中的内容会被隐藏,以保护用户的隐私;3、数字文本框等等。

2023.10.12

4363

6

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.09

3763

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习