npm 包 graphql-tools 使用教程

阅读时长 4 分钟读完

简介

graphql-tools 是一个npm包,提供了一些常用的 GraphQL 工具函数和类。它可以帮助我们更容易地实现 GraphQL API 开发,避免重复造轮子。

安装

使用 npm 安装 graphql-tools

基本使用

1. 构建 schema

graphql-tools 提供了一个 makeExecutableSchema 函数用于构建 schema。该函数接受一个对象参数,其中包含类型定义(typeDefs)和解析器(resolvers)等信息。

例如,我们可以创建一个简单的 schema:

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

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

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

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

这个 schema 定义了一个名为 Query 的类型,其中包含一个名为 hello 的字段,返回一个字符串 "Hello world!"。

2. 添加中间件

graphql-tools 还提供了一些中间件函数,用于处理请求和响应。最常用的是 addMockFunctionsToSchema 函数,它可以为 schema 中的每个字段自动生成 mock 数据,方便前端开发调试。

例如,我们可以修改上面的例子来添加 mock 数据:

这里就不需要手动在 resolvers 中实现 hello 字段的逻辑了。

3. 加载外部 schema

可以使用 mergeSchemas 函数将多个 schema 合并成一个。例如,我们可以创建两个文件 schemaA.jsschemaB.js

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

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

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

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

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

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

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

然后在另一个文件中加载它们并合并:

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

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

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

总结

graphql-tools 包提供了一些常用的 GraphQL 工具函数和类,可以帮助我们更容易地实现 GraphQL API 开发。本文介绍了该包的基本使用方法,并提供了一些示例代码。希望能对读者有所帮助。

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

纠错
反馈