npm 包 graphql-tools-type-email 使用教程

阅读时长 11 分钟读完

GraphQL 是一种用于 API 的查询语言。相对于 REST,它具有更好的灵活性和强大的功能,可以减少前后端开发间的沟通成本。而重要的是,GraphQL 还有着非常完善的类型系统,让我们能够在开发过程中更准确地表达 API 的数据结构。

在 GraphQL 中,可以自定义标量类型,以定义出符合自身业务逻辑的数据类型。而 graphql-tools 就是一个用于自定义 GraphQL Schema 的工具库。它提供了很多工具函数和模块,让我们可以方便地快速地构建一个符合我们需求的 GraphQL Schema。

而其中 graphql-tools-type-email 是一个用于自定义 Email 标量类型的 npm 包。它可以帮助我们快速地定义出一个 Email 类型,以便更好地验证与处理 GraphQL 中的邮件地址。下面,本文将介绍如何使用 graphql-tools-type-email

安装

我们可以直接使用 npm 进行安装:

使用

首先,我们需要引入一些必要的模块与函数:

接着,我们需要定义一个 Schema String,里面包含我们自定义的 Email 类型:

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

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

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

接下来,我们可以使用 mergeTypes 函数来合并我们的 Schema String 与 EmailAddressType,以方便我们引用:

这里需要注意的是,我们必须在 schema 生成时使用 mergeTypes 将我们定义的 Email 类型与原有的 Schema String 合并,否则我们将无法使用 EmailAddress 标量类型。

详解

通过上述代码,我们成功定义出了一个 Email 类型。接下来,让我们详细地了解 graphql-tools-type-email 的各种参数和用法。

包导出的类型

graphql-tools-type-email 包导出了 EmailAddressTypeEmailResolver 两个类型。其中 EmailAddressType 是用于自定义 Email 标量类型的,类似于 graphql-scalars 包导出的 EmailAddress 标量类型。而 EmailResolver 则是用于执行 Email 标量类型的解析函数的,可以自定义。

参数说明

EmailAddressType

  • &GraphQLScalarTypeConfig:GraphQL 标量类型的配置项,用于定制标量类型的名称、解析值的方式等。

    • name?: string:标量类型的名称。默认为 "EmailAddress"
    • description?: string:标量类型的描述。默认为 "A field whose value conforms to the standard internet email address format as specified in RFC822: https://www.w3.org/Protocols/rfc822/."
    • serialize?: GraphQLScalarSerializer<TSerialized>:用于序列化值的函数。默认为 EmailAddress.parseValue
    • parseValue?: GraphQLScalarValueParser<TInternal>:用于解析值的函数,将客户端传递的值解析为内部值。默认为 EmailAddress.parseValue
    • parseLiteral?: GraphQLScalarLiteralParser<TInternal>:用于解析字面量的函数,将 GraphQL 查询中出现的字面量解析为标量类型的值。默认为 EmailAddress.parseLiteral

其中,serializeparseValueparseLiteral 参数会在后面的小节中再作详解。

EmailResolver

  • format?: (email: string) => string:用于执行 Email 标量类型的解析函数的回调函数。默认为 email => email,即默认原样返回传入的 Email。

serialize 参数

serialize 参数指定了如何将标量类型转换为 JSON 表示。一般来说,我们都可以直接沿用 graphql-scalars 包中的 serialize 函数:

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

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

parseValue 参数

parseValue 参数指定了如何将客户端传递的值解析为内部值。在 graphql-scalars 包中,一般也可以沿用 parseValue 函数:

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

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

parseLiteral 参数

parseLiteral 参数指定了如何将 GraphQL 查询中出现的字面量解析为标量类型的值。同样,在 graphql-scalars 包中,我们可以沿用 parseLiteral 函数:

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

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

EmailResolver 参数

EmailResolver 类型是一个回调函数,用于执行 Email 标量类型的解析。它可以接收客户端传递的值,进行处理并返回处理结果。默认情况下,它仅仅将传入的值原样返回。

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

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

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

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

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

在上面的代码中,我们可以通过 EmailAddress: EmailResolverEmailResolver 回调函数添加到 GraphQL Schema 的解析函数中,从而让 Email 类型得到处理:

当然,我们也可以自定义 Email 的解析方式:

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

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

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

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

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

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

在上述代码中,我们自定义了一个 formatEmail 函数,用于将传入的 Email 转为小写。同时,在 GraphQL Schema 的解析函数中通过 { ...EmailResolver, format: formatEmail } 引入了自定义的解析方式:

示例代码

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

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

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

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

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

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

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

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066b5a51ab1864dac66f19

纠错
反馈