如何将 GraphQL 集成到你的 Node.js 应用程序中

阅读时长 7 分钟读完

GraphQL 是一种用于 API 的查询语言,它可以让客户端精确地指定其需要的数据。它可以帮助你更好地组织你的 API,并提供更好的性能和可维护性。

在本文中,我们将学习如何将 GraphQL 集成到你的 Node.js 应用程序中。我们将从安装和配置开始,然后深入探讨如何定义和使用 GraphQL 模式,以及如何编写解析器和数据源。

安装和配置

首先,我们需要安装必要的依赖项。我们将使用以下命令安装它们:

接下来,我们需要配置我们的应用程序。我们将使用 Express 框架来创建我们的应用程序,并使用 express-graphql 中间件来处理 GraphQL 请求。我们的应用程序将监听端口 4000。

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

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

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

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

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

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

在上面的代码中,我们定义了一个 GraphQL 模式,其中包含一个查询类型 Query 和一个名称为 hello 的字段。我们还定义了一个名为 root 的对象,其中包含一个名为 hello 的函数,该函数返回字符串“Hello world!”。

我们将使用 graphqlHTTP 中间件来处理 GraphQL 请求。我们将传递我们的模式和根对象作为选项,并将 graphiql 选项设置为 true,以便启用 GraphiQL IDE。

现在,我们可以运行我们的应用程序,并在浏览器中访问 http://localhost:4000/graphql,以查看我们的 GraphQL API。

定义和使用 GraphQL 模式

现在我们已经设置了我们的应用程序,我们可以开始定义我们的 GraphQL 模式。我们将使用 SDL(Schema Definition Language)来定义我们的模式。

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

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

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

在上面的代码中,我们定义了三种类型:Query、User 和 Post。我们的查询类型 Query 包含两个字段:user 和 users。user 接受一个 ID 参数,并返回一个 User 类型的对象。users 返回一个 User 类型的数组。

User 类型包含四个字段:id、name、email 和 posts。id 和 name 是必需的字段,email 是可选的。posts 是一个 Post 类型的数组。

Post 类型包含四个字段:id、title、body 和 author。id、title 和 body 是必需的字段,author 是一个 User 类型的对象。

现在我们已经定义了我们的模式,我们可以使用它来查询我们的数据。我们将使用我们之前定义的 root 对象来处理我们的查询。

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

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

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

在上面的代码中,我们定义了两个函数:getUserById 和 getAllUsers。这些函数将根据查询中传递的参数返回相应的数据。我们将使用这些函数来处理我们的查询。

现在我们可以在 GraphiQL 中运行我们的查询。我们将使用以下查询来获取所有用户的名称和电子邮件地址:

我们将使用以下查询来获取 ID 为 1 的用户的名称和电子邮件地址:

编写解析器和数据源

现在我们已经定义了我们的模式和根对象,我们可以开始编写我们的解析器和数据源。我们的解析器将负责将查询转换为数据源可以理解的格式,并将结果返回给客户端。

我们将编写一个名为 UserResolver 的解析器。我们将使用这个解析器来处理所有与用户相关的查询。

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

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

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

在上面的代码中,我们定义了一个名为 UserResolver 的类。这个类包含两个方法:getUserById 和 getAllUsers。这些方法将从数据源中获取数据,并将其返回给客户端。

我们还需要编写一个数据源,该数据源将从数据库或其他数据存储中获取数据。我们将编写一个名为 UserDataSource 的数据源。

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

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

在上面的代码中,我们定义了一个名为 UserDataSource 的类。这个类包含两个方法:getUserById 和 getAllUsers。这些方法将从数据库或其他数据存储中获取数据,并将其返回给解析器。

现在我们已经定义了我们的解析器和数据源,我们可以将它们与我们的模式和根对象一起使用。

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

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

在上面的代码中,我们创建了一个名为 userResolver 的 UserResolver 对象,并将其传递给我们的根对象。我们的根对象将使用这个解析器来处理我们的查询。

现在我们可以在 GraphiQL 中运行我们的查询。我们将使用以下查询来获取所有用户的名称和电子邮件地址:

我们将使用以下查询来获取 ID 为 1 的用户的名称和电子邮件地址:

结论

在本文中,我们学习了如何将 GraphQL 集成到我们的 Node.js 应用程序中。我们学习了如何定义和使用 GraphQL 模式,以及如何编写解析器和数据源。我们还学习了如何使用 Express 框架和 express-graphql 中间件来处理 GraphQL 请求。

GraphQL 是一个非常强大的工具,可以帮助我们更好地组织我们的 API,并提供更好的性能和可维护性。我希望这篇文章能够帮助你开始使用 GraphQL,并在你的应用程序中获得更好的结果。

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

纠错
反馈