处理 GraphQL 错误:一个指南

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

当使用 GraphQL 时,错误可能会在几种不同的地方发生:服务器端的代码、GraphQL 查询和客户端代码。了解如何处理这些错误是成为前端工程师的必要技能之一。本篇文章将向您介绍如何在前端处理 GraphQL 错误的方法,包括:

  • 使用 GraphQL 错误对象
  • 处理服务器端错误
  • 处理 GraphQL 查询中的错误
  • 在客户端显示错误信息

使用 GraphQL 错误对象

在处理 GraphQL 错误时,可以使用 GraphQL 错误对象。这个对象包含了错误的详细信息,包括错误信息字符串、错误代码和错误位置。下面是一个示例 GraphQL 错误对象:

-
  ---------- ------- ----- ----- ------- -- ---- -----------
  ------------ -
    -
      ------- --
      --------- -
    -
  --
  ------- -
    -------
    -----
  -
-

在此示例中,错误的信息描述了在 “User” 类型上查询 “age” 字段是不允许的。locations 数组指示这个错误发生在查询中的第 3 行第 3 列。path 字段描述了错误的对象和字段。

处理服务器端错误

当服务器端发生错误时,服务器将向客户端返回一个错误响应,表示 GraphQL 查询已中止。您可以在客户端捕获这个响应并显示错误消息。以下是一个处理服务器端错误的示例代码:

----------------- -
  ------- -------
  -------- - --------------- ------------------ --
  ----- ---------------- ------ -- ----- -- ---
--
--------- -- -----------
--------- -- -
  -- ------------ -
    -------------------------
    ---------------- ---- --------
  - ---- -
    ---------------------
  -
--
---------- -- -------------------

在此示例中,我们向服务器发出 POST 请求,为 GraphQL API 提供了查询字符串 { users }。当服务器响应包含一个 errors 数组时,表示发生了错误。如果发生错误,它们将被记录到控制台,并使用 alert() 函数向用户显示错误消息。

处理 GraphQL 查询中的错误

当在 GraphQL 查询中发生错误时,GraphQL 将返回一个包含错误的数据对象,而不是一个具有有效数据的对象。您可以在客户端捕获这个对象并显示错误消息。以下是一个处理 GraphQL 查询中错误的示例代码:

------ - -------- - ---- ----------------
------ - --- - ---- -------------

----- --------------- - ----
  ----- -------- -
    ----- -
      --
      ----
      ---
    -
  -
-

-------- ------- -
  ----- - -------- ------ ---- - - -------------------------

  -- --------- ------ -----------------
  -- ------- ------ ----------------------

  ------ -
    ----
      -------------------- -- -
        --- --------------
          ----------- ------------
        -----
      ---
    -----
  -
-

在此示例中,我们使用 Apollo Client 库的 useQuery 钩子来执行 GraphQL 查询。当查询处于加载状态时,我们向用户显示 Loading... 文本。当查询出现错误时,错误的消息将被渲染并显示给用户。否则,查询的结果将被渲染,并返回包含用户数据的 <li> 列表。

在客户端显示错误信息

当客户端的代码出现错误时,您需要捕获错误并向用户显示错误消息。以下是一个在所有浏览器中处理前端错误的示例代码:

--------- -----
------
------
  ----- ----------------
  --------- -----------
-------
------
  ----------- -- -- --------

  --------
    -------------- - ----------------- ------- ------- ------ ------ -
      --------------
      --------------------
    -

    -------- ------------- -
      ----- --- ---------------- ---- --------
    -

    --- -
      -------------
    - ----- ----- -
      ------------------
    -
  ---------
-------
-------

在此示例中,我们将 window.onerror 函数设置为监听前端错误。当发生错误时,错误消息将被弹出,并在控制台中记录错误。我们还在 doSomething() 函数中捕获错误,并在控制台中记录它们。

结论

处理 GraphQL 错误是前端工程师必须掌握的技能之一。在本文中,我们介绍了如何使用 GraphQL 错误对象、处理服务器端错误、处理 GraphQL 查询中的错误以及在客户端显示错误消息。我们希望这个指南能够帮助您更好地处理 GraphQL 错误并提高您的开发效率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/671c47109babaf620faffeeb


猜你喜欢

  • Fastify-socket.io: 运用 socket.io 来处理实时数据交互

    在现代 web 开发中,实时数据交互已经成为非常重要的一部分。为了满足这种需求,我们需要一种高效的工具来轻松地处理实时数据交互。这就是为什么在前端开发中,使用 socket.io 成为了一种非常流行的...

    17 天前
  • Redis 的集群分片策略性能分析

    前言 Redis 是一个快速和开源的非关系型数据库(NoSQL)。它支持键-值(key-value)存储,数据结构存储和多种高级数据结构。由于其高性能,简单易用和可靠性,Redis 在 Web 应用程...

    17 天前
  • 在 Tailwind CSS 中使用 @apply 的注意事项

    在使用 Tailwind CSS 进行前端开发时,@apply 是一个非常实用的功能,它可以大幅减少代码量并提高代码复用性。然而,使用@apply 有一些需要注意的事项,本文将对这些问题进行详细讨论,...

    17 天前
  • 如何使用 Hapi 实现微信公众号开发中的签名验证

    随着移动互联网时代的到来,微信公众号成为了企业宣传、推广和客户服务的重要渠道之一。在开发微信公众号时,签名验证是必不可少的一步,它保证了微信服务器和第三方应用之间通信的安全性。

    17 天前
  • React Native 中使用 Enzyme 测试组件报错解决方案

    React Native 是一种广泛使用的仿原生应用的跨平台开发框架,而 Enzyme 是一个流行的 React 测试库,常用于在 React Native 上测试组件。

    17 天前
  • Headless CMS 在开发流程中的优势与必要性剖析

    Headless CMS 是一种新兴的内容管理系统,它与传统的 CMS 不同之处在于,Headless CMS 只提供 API 接口,不关心如何呈现这些内容。本文将从以下几个方面介绍 Headless...

    17 天前
  • Material Design 中的图片加载技巧

    在Web应用程序以及移动应用程序的设计中,图片通常是不可或缺的一部分。提供高质量的图片可以增强应用程序的可视化体验,同时也有助于传达重要信息。然而,大量的图片加载可能影响用户体验,特别是当图像库过大时...

    17 天前
  • CSS Grid 实现响应式图片库布局

    CSS Grid 已经成为一种非常流行的布局技术,可以帮助我们快速地构建复杂的网页布局。在本文中,我们将会介绍如何使用 CSS Grid 实现响应式图片库布局。本文将包含以下内容: 什么是 CSS ...

    17 天前
  • Web Components 技术如何实现组件之间的通信

    Web Components 技术已经成为了开发现代化前端应用程序的主流。这项技术使得前端组件可以被重复利用,从而提高了应用程序的可维护性和可扩展性。但是,一个应用程序不仅仅只是一个集合了一堆组件的容...

    17 天前
  • Lucene 索引性能优化

    Lucene 是一个用于信息检索的 Java 库。它提供了高效的全文搜索、分析、过滤等功能,广泛应用于各种搜索引擎、文档管理系统等领域。在使用 Lucene 开发搜索引擎时,优化索引性能是一个非常重要...

    17 天前
  • 如何在 Custom Elements 中正确地使用 CSS 伪元素?

    在前端开发中,Custom Elements 是一个很有用的特性,它能够让开发者自定义 HTML 元素,并通过 JavaScript 进行扩展。但是,使用 Custom Elements 时需要注意一...

    17 天前
  • Redis 集群内的数据备份机制介绍

    前言 Redis 是一个快速、开源的键值对存储数据库。它能存储多种数据结构,如字符串、哈希表、列表、集合等等。在分布式系统中,为了提高系统的可用性和容错性,Redis 提供了集群模式来支持多节点的数据...

    17 天前
  • 在 Express.js 中实现 Solr 搜索引擎的集成

    Solr 搜索引擎是一种基于 Apache Lucene 的开源搜索引擎,提供了丰富的搜索特性和扩展性。在前端开发中,我们经常需要在网站或者应用中实现搜索功能,而 Solr 搜索引擎是一个不错的选择。

    17 天前
  • 如何提升 RESTful API 的性能

    RESTful API 是 Web 应用程序中最常用的 API 之一。尽管它非常受欢迎,但如果不正确实现,它可能会成为 Web 应用程序性能的瓶颈。 在本文中,我们将讨论如何通过几种优化技术来提高 R...

    17 天前
  • ES8 的新特性:Object.entries() 与 Object.values() 方法

    在 JavaScript 中,Object 是一个非常重要的对象类型。在 ES8 中,Object 对象新增了两个非常有用的方法:Object.entries() 与 Object.values()。

    17 天前
  • 前端响应式设计中无法避免的兼容性问题

    在现代 Web 开发中,响应式设计已经成为了不可或缺的一部分。使用响应式设计可以使页面在不同的设备上展现出最佳的效果,并提供更好的用户体验。但在实践中,我们不可避免地会遇到一些兼容性问题。

    17 天前
  • 使用 ECMAScript 2015(ES6)中的 Map 对象实现键值对

    ECMAScript 2015 (ES6)是 JavaScript 的一个重大更新版本,它增加了许多新的语言功能和 API。其中一个比较实用的特性是 Map 对象,它是一种可以存储键值对的集合,类似...

    17 天前
  • React 与 TypeScript:如何正确地使用 hooks?

    React 是一种 JavaScript 库,用于构建用户界面。在 React 中,hooks 是一个重要的概念,它可以让我们在函数组件中使用状态和生命周期钩子,从而使代码更简洁且易于维护。

    17 天前
  • 如何正确配置 Babel

    Babel 是一个广泛使用的 JavaScript 转换器,它可以将 ES6(ECMAScript 2015)及以上语法转换成向后兼容的 JavaScript 代码。

    17 天前
  • 解决 Jest 测试中遇到缺少 polyfills 的问题

    在前端开发中,测试是不可或缺的环节。而 Jest 作为一款常用的 JavaScript 测试框架,被广泛用于前端开发中。然而,在使用 Jest 进行测试时,我们有时会遇到缺少 polyfills 的问...

    17 天前

相关推荐

    暂无文章