GraphQL 中的错误处理技巧详解

面试官:小伙子,你的代码为什么这么丝滑?

GraphQL 是一种用于 API 开发的查询语言,它专注于提高数据传输效率和可扩展性。虽然 GraphQL 为前端开发人员提供了许多便利,但是如果不处理错误,它可能会成为一个致命的缺陷,因为它的错误处理方式与传统的 REST API 不同。

在本文中,我们将讨论 GraphQL 中的错误处理技巧,这些技巧不仅可以帮助您识别和纠正错误,还可以提高您的编写可靠代码的技能。

错误类型

在 GraphQL 中,错误有两种类型:语法错误和运行错误。

语法错误

语法错误发生在查询或变异输入中,当 GraphQL 引擎无法将其解析为有效的操作或片段时发生。当客户端发送错误的查询时,服务器会返回带有错误详情的错误对象。

以下是一个示例查询,其中包含语法错误:

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

这将返回一个带有以下错误消息的错误对象:

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

运行错误

运行错误发生在查询或变异执行期间,当请求无法得到响应或遇到错误时发生。

以下是一个示例查询,其中存在运行错误:

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

这将返回一个带有以下错误消息的错误对象:

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

错误处理

在 GraphQL 中,有几种处理错误的方法。以下是最常见的三种方法:

1.异常处理

异常处理是最常见的错误处理方法,它使用 try-catch 块捕获并处理可能导致错误的语句。实现异常处理的好处是,它可以封装单个错误,并在多个位置使用错误处理。

以下是一个基于 GraphQL 的异常处理程序的示例:

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

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

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

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

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

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

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

2.自定义错误类

自定义错误类会为特定的错误实现一个包装器。这有助于标准化错误消息和错误代码,以便客户端和服务器端代码都能够处理它们。

以下是一个自定义错误类的示例:

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

可通过以下方式修改异常处理程序以使用 UserNotFoundError:

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

3.使用 GraphQL 中间件

另一个常见的错误处理方法是使用 GraphQL 中间件。GraphQL 中间件可以在执行查询之前、之后或同时处理解析过程、验证和权限等问题。错误处理器也是其中之一。

以下是一个使用 express-graphql 中间件的示例:

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

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

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

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

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

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

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

结论

在 GraphQL 中,错误处理非常重要。在处理异常、自定义错误类或使用中间件时,需要小心处理错误,以确保客户端与服务端代码都可以友好地处理它们。通过上述方法进行正确的错误处理,将能更好地识别和纠正错误,提高代码的可信性。

希望这篇文章能让您深刻理解 GraphQL 中的错误处理,并为您的项目提供指导和帮助。

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


猜你喜欢

  • ES8中新增的标准库方法:Array.prototype.includes()

    在ES8中,新增了一个非常实用的数组方法,它就是Array.prototype.includes()。这个方法可以帮助我们快速地判断一个数组是否包含某个元素,其返回值为布尔值。

    7 天前
  • Rxjs 实践应用 ——cookbook

    Rxjs是一种数据异步处理的库,它主要用于事件、回调和异步处理。它可以被用于编写响应式编程的前端代码,用于处理异步数据源,如鼠标事件、HTTP请求等。在本文中,我们将介绍如何将Rxjs应用于前端开发中...

    7 天前
  • 如何在 Mocha 测试中使用 Selenium

    在前端开发中,我们经常需要对页面进行测试以确保其质量和可靠性。Mocha 是一个流行的测试框架,而 Selenium 则是一个用于 Web 应用程序测试的自动化工具。

    7 天前
  • 使用 Tailwind CSS 进行响应式设计的技巧和方法

    在当前互联网时代,移动设备的使用方兴未艾,因此,网站和应用程序的响应式设计变得越来越重要。随着整个行业和用户对网站和应用程序的期望,有一些新的前端框架和库出现在了市场上,其中一个非常受欢迎并备受讨论的...

    7 天前
  • 通过使用 React.js 构建 SPA 来提高用户体验的 3 种最佳方法

    React.js 是一种流行的 JavaScript 库,它可以帮助开发人员构建高度优化的单页面应用程序(SPA)。SPA 有助于提高用户体验,使页面加载更快,响应更快,并且更容易维护。

    7 天前
  • webpack 构建及优化实践

    Webpack 是一个优秀的前端构建工具,具有打包、压缩、代码优化、模块化等强大的功能,是目前前端项目构建不可或缺的工具之一。在本文中,我们将深入探讨 Webpack 的各种功能,以及如何在实践中优化...

    7 天前
  • 如何使用 Serverless 框架生成 Lambda 函数

    本文将介绍如何使用 Serverless 框架生成 Lambda 函数。Serverless 框架是一款基于云服务的框架,它可以自动化部署和扩展云端应用程序。Serverless 框架可以帮助开发者节...

    7 天前
  • 用 CSS Grid 实现导航菜单布局的教程

    CSS Grid 是一个新的布局模块,可以快速实现复杂的网格布局。 在这篇文章里,我们将会学习如何使用 CSS Grid 来实现一个导航菜单布局。本文假设你已经了解了 CSS Grid 的基础知识。

    7 天前
  • Angular 7:高阶组件进阶

    在 Angular 中,高阶组件是一种常见的开发模式,它可以将多个组件的功能进行抽象与封装,从而达到代码复用与简化的目的。在 Angular 7 中,高阶组件的使用又有了新的进阶方式,本文将从以下几个...

    7 天前
  • 一文搞懂 ECMAScript 2020 中的 Promise.allSettled()

    介绍 在 ECMAScript 2020 中,Promise 增加了一个新方法:Promise.allSettled() 。这个方法在 Promise.all() 的基础上增加了一些新功能,可以更加方...

    7 天前
  • LESS 文件被识别为 Plain Text 的解决方案

    LESS 文件被识别为 Plain Text 的解决方案 在前端开发中,使用 LESS 来编写 CSS 可以让我们更方便地管理样式表,但是有时我们可能会遇到 LESS 文件被识别为 Plain Tex...

    7 天前
  • 解决 Deno 无法找到 npm 包的问题

    Deno 是一个新型的 JavaScript/TypeScript 运行时,它提供了一种安全的方式去运行某些特殊用途的脚本。Deno 对于前端开发人员来说是一个非常重要的工具,但是在使用 Deno 时...

    7 天前
  • 如何在 GraphQL 中使用多语言支持?

    GraphQL 是一种流行的查询语言,它带来了很多方便的查询功能。其中一个非常有用的功能是多语言支持。如果你在构建一个国际化的应用程序,那么多语言支持是非常必要的。

    7 天前
  • 如何通过 Web Components 实现一套跨平台 UI 组件库

    Web Components 是一项用于创建可重用的自定义 HTML 元素和组件的新技术。通过 Web Components,我们可以将自己的组件封装在一个自定义元素中,提供单独的样式,HTML 和行...

    7 天前
  • 如何利用无障碍技术提高手机音乐播放器的易用性

    随着移动设备的普及,手机已经成为了我们生活中不可或缺的一部分。当我们使用手机来听音乐时,我们通常会使用手机自带的音乐播放器或其他第三方音乐播放器应用。然而,对于一些视力、听力、肢体能力等存在障碍的用户...

    7 天前
  • MongoDB 如何在 Sharded Cluster 中实现数据划分及负载均衡?

    在现代应用中,数据量通常会逐渐增长,而单个 MongoDB 实例可能无法满足这种需求。为了解决这个问题,我们可以创建一个 MongoDB Sharded Cluster,以便将数据分布在不同的节点和服...

    7 天前
  • 使用 Chai 和 Karma 从头开始编写 JavaScript 测试套件

    在前端开发中,测试是非常重要的一环,它可以保证代码的稳定性和质量。而 JavaScript 作为前端开发的核心技术之一,其测试也变得日益重要。为了解决这个问题,我们可以使用 Chai 和 Karma ...

    7 天前
  • PM2 与 Apache 的协作指南:Nginx 之外的选择

    在前端开发中,如何对服务器进行管理和调试是一项非常重要的任务。而对于一些大型和复杂的网站,常常需要多个服务器协同工作,这就需要一种高效而稳定的协作方式。本文将介绍 PM2 和 Apache 的协作指南...

    7 天前
  • SASS 中使用 @content 的示例代码

    SASS 中使用 @content 的示例代码 SASS 是一种 CSS 预处理器,它可以让你使用类似于编程语言的方法来构建 CSS 样式。这种语言拥有许多优秀的功能,其中之一是 @content。

    7 天前
  • 解决 TypeScript 内存泄漏问题的技巧

    TypeScript 是一种静态类型检查的 JavaScript 超集,给 JavaScript 增加了更强大的类型支持和更好的可读性。但是,使用 TypeScript 也会遇到内存泄漏的问题。

    7 天前

相关推荐

    暂无文章