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

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


猜你喜欢

  • npm 包 accept-cookies 使用教程

    在前端开发中,通常需要对用户的 cookie 进行操作。而随着 GDPR 以及其他法律法规的不断加强,我们在操作用户 cookie 时需要征得用户的同意。而 accept-cookies 就是一个可以...

    3 年前
  • npm 包 @ndcode/disk_build 使用教程

    在前端开发中,我们经常需要通过构建工具将代码打包成可执行的文件以及静态资源,而 @ndcode/disk_build 是一个提供了打包和构建功能的 npm 包,它可以帮助我们更便捷地完成前端项目的构建...

    3 年前
  • npm 包 uow-template 使用教程

    在前端开发中,我们常常需要创建复杂页面,而这些页面往往需要大量的 HTML 模板代码。手工编写 HTML 模板会非常麻烦,而且容易出错。为了方便地创建 HTML 模板,我们可以使用 npm 包 uow...

    3 年前
  • npm 包 vuepress-plugin-flowchart 使用教程

    在前端开发过程中,流程图的展示和呈现是很常见的需求。实际上,基于 Vue 框架的流程图插件——vuepress-plugin-flowchart可以方便地引入到 Vuepress 项目中,让我们展现流...

    3 年前
  • npm 包 Marten 使用教程

    前言 在前端开发中,我们经常需要处理日期时间。然而 JavaScript 对日期时间的处理却比较麻烦,常常需要手动处理。因此,有人开发了 Marten 这个 JavaScript 库,帮助我们更方便地...

    3 年前
  • npm 包 yl-persistent-var 使用教程

    在前端开发过程中,我们经常需要在应用程序的不同模块之间共享数据。而在 JavaScript 中,通常会使用全局变量、事件订阅或发布、或者简单的数据传递来实现这一点。

    3 年前
  • npm 包 @lordoftheflies/plutonium-chart 使用教程

    介绍 @lordoftheflies/plutonium-chart 是一个基于 D3.js 开发的前端图表库,可以用于绘制多种类型的图表,包括折线图、柱状图、饼图等。

    3 年前
  • npm 包 vue-multi-mask-component 使用教程

    在前端开发中,我们经常需要使用遮罩层来控制页面的交互,让用户不能对页面进行操作等。而随着 Vue 的流行,我们有了更多的选择来实现遮罩层的功能。在本文中,我们介绍一个能够提供多样化遮罩层的 npm 包...

    3 年前
  • npm 包 react-photo-viewer 使用教程

    React-photo-viewer 是一个 React 的 npm 包,用于在网页中展示图片并提供缩放、旋转、下载等功能。本文将介绍如何使用这个包。 安装 使用 npm 进行安装: --- ----...

    3 年前
  • npm 包 sails-hook-mongo-auto-create-indexes 使用教程

    在使用 MongoDB 作为后端数据库时,索引对于查询性能和并发控制都有很大的帮助。而手动创建索引是非常繁琐的,特别是对于大型数据库。为了避免手动创建索引过程中的失误,npm 社区中提供了许多自动化创...

    3 年前
  • npm 包 bpmn-js-properties-panel-jl 使用教程

    在前端开发中,BPMN 即 Business Process Model and Notation,是一种流程建模标准。然而,BPMN 的核心标准并不包含属性面板的定义,因此需要借助第三方库来实现。

    3 年前
  • npm 包 pixl-acl 使用教程

    在 Web 应用开发中,访问控制(Access Control)是一个非常重要的概念。它可以帮助我们管理用户对于特定资源(比如页面、接口等)的读写权限,以保证我们的应用在安全性和可信度上达到了最基础的...

    3 年前
  • npm 包 @intocode-io/nearly-equal 使用教程

    介绍 在前端开发中,我们经常需要比较两个数值是否相等,但是由于 JavaScript 浮点数精度的问题,直接比较两个数值可能会出现不准确的情况。因此,我们需要使用一些方法来近似比较两个数值是否相等。

    3 年前
  • npm 包 @intocode-io/line-bot-server 使用教程

    在 Line Bot 的开发过程中,后端服务器是必不可少的一环。如果没有后端服务器,Line Bot 无法通过 Line Messaging API 与用户交互。为了简化开发流程,较为常见的做法是使用...

    3 年前
  • npm 包 file-oper 使用教程

    前言 在前端开发中,我们经常需要在浏览器中读取或操作本地文件。但是,由于浏览器的安全限制,直接在浏览器中操作本地文件是非常困难的。为了解决这个问题,我们可以使用 npm 包 file-oper。

    3 年前
  • npm 包 @nk-dev/ngx-bootstrap 使用教程

    Node Package Manager,简称为 npm,是目前前端开发最流行的包管理器之一。借助 npm,我们可以快速方便地安装各种库、框架和工具。@nk-dev/ngx-bootstrap 是 n...

    3 年前
  • npm 包 @vjpr/babel-plugin-console 使用教程

    在前端开发过程中,经常会使用到 Babel 这款 JavaScript 编译器,以便能够在不同版本的浏览器中使用最新的 ES6+ 语法。而 @vjpr/babel-plugin-console 这个 ...

    3 年前
  • npm 包:starwars-names-matthesons 使用教程

    前言 在程序员的世界里,星球大战(Star Wars)是一个经典题材,因此很多人开发了各种各样的应用程序,从而将星球大战元素与编程世界融合在一起。 npm(Node.js 包管理器)是 Node.js...

    3 年前
  • npm 包@lucsan/noddy 使用教程

    在前端开发中,npm 是一个众所周知的工具。它是 Node.js 包管理器,开发者可以通过它发布、分享和使用 JavaScript 代码。在 npm 上有很多前端类的包可供使用,其中@lucsan/n...

    3 年前
  • 使用 eslint-config-semistandard-4i 来规范你的 JavaScript 代码风格

    JavaScript 代码风格的规范对于程序员来说非常重要,它可以使代码更加易读和易维护。在前端开发中常常使用到的 npm 包 eslint-config-semistandard-4i,可以帮助开发...

    3 年前

相关推荐

    暂无文章