使用 GraphQL 在 Node.js 中制作实时应用程序

阅读时长 8 分钟读完

GraphQL 是一种用于 API 的查询语言和运行时环境。它可以被用于任何语言和框架中,包括 Node.js。在本文中,我们将介绍如何在 Node.js 中使用 GraphQL 来制作实时应用程序。

什么是 GraphQL?

GraphQL 是一种用于 API 的查询语言和运行时环境。它提供了一种更高效、更强大的方式来从服务器获取数据。与 REST 相比,GraphQL 允许客户端精确地指定它需要哪些数据,而不需要请求整个资源。

GraphQL 的核心概念是类型系统。类型系统描述了可以查询的数据的结构。每个 GraphQL 服务都有一个类型系统,客户端可以使用它来构建查询。查询由一个或多个字段组成,每个字段都有一个返回类型。

如何在 Node.js 中使用 GraphQL?

要在 Node.js 中使用 GraphQL,我们需要安装 graphqlexpress-graphql 模块。我们可以使用以下命令来安装它们:

安装完成后,我们可以开始编写代码。

首先,我们需要创建一个 GraphQL schema。这个 schema 描述了我们的数据模型和可用的查询。以下是一个简单的例子:

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

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

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

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

在这个例子中,我们定义了一个 UserType,它有 idnameemail 字段。我们还定义了一个 QueryType,它有一个 user 字段,用于查询用户。resolve 函数用于实现查询逻辑。

接下来,我们需要创建一个 GraphQL 服务器。我们可以使用 express-graphql 模块来创建它。以下是一个简单的例子:

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

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

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

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

在这个例子中,我们创建了一个 Express 应用程序,并使用 graphqlHTTP 中间件创建了一个 GraphQL 服务器。我们将 schema 传递给中间件,并设置 graphiql 选项为 true,以便使用 GraphiQL 工具进行调试。

现在我们已经创建了一个 GraphQL 服务器,我们可以使用它来查询数据。以下是一个简单的例子:

这个查询将返回 ID 为 1 的用户的名字和电子邮件。

如何制作实时应用程序?

GraphQL 允许我们使用订阅来实现实时应用程序。订阅允许客户端接收服务器端的推送通知。

要使用订阅,我们需要使用 graphql-subscriptions 模块。我们可以使用以下命令来安装它:

安装完成后,我们可以修改我们的 schema 来支持订阅。以下是一个简单的例子:

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

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

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

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

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

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

在这个例子中,我们定义了一个 SubscriptionType,它有一个 userAdded 字段,用于订阅用户添加事件。subscribe 函数用于订阅事件。我们使用 pubsub 对象来管理事件。

接下来,我们需要修改我们的服务器代码来支持订阅。以下是一个简单的例子:

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

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

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

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

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

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

在这个例子中,我们创建了一个 HTTP 服务器,并在端口 3000 上侦听。我们还创建了一个订阅服务器,并将其与 HTTP 服务器一起启动。我们将订阅服务器的路径设置为 /subscriptions

现在,我们已经创建了一个支持订阅的 GraphQL 服务器,我们可以使用它来制作实时应用程序。以下是一个简单的例子:

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

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

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

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

在这个例子中,我们创建了一个 WebSocket 连接,并使用订阅查询来订阅用户添加事件。我们使用 onmessage 事件处理程序来处理服务器发送的数据。

结论

在本文中,我们介绍了如何在 Node.js 中使用 GraphQL 来制作实时应用程序。我们学习了 GraphQL 的核心概念和如何使用它来查询数据。我们还介绍了如何使用订阅来实现实时应用程序。这些知识可以帮助我们更好地理解和使用 GraphQL。

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

纠错
反馈