Node.js GraphQL 的教程

阅读时长 9 分钟读完

GraphQL 是一种新颖的数据查询语言,可以让前端应用程序向后端服务器发送更加精细化的查询请求,以获取更加精准和优化的数据响应。Node.js 是一个高效而强大的后端 JavaScript 框架,它可以与 GraphQL 搭配使用,为数据查询服务提供简单而可靠的解决方案。

在本教程中,我们将学习如何使用 Node.js 搭建 GraphQL 的后端服务,以及如何编写 GraphQL 查询的 API,并通过示例代码进行演示。

环境设置

在开始之前,我们需要确保 Node.js 和 npm 已经在您的计算机上安装好了。如果没有安装,您需要打开终端并执行以下命令:

然后,我们将安装 express-graphqlgraphql 两个 Node.js 模块。执行以下命令:

接下来,我们需要创建一个新的 Node.js 项目。在您的终端中执行以下命令:

然后,在 node-graphql 目录中创建一个新的 index.js 文件,并将以下代码复制进去:

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

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

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

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

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

这个示例代码定义了一个 GraphQL schema 和一个简单的 resolver 函数。在本例中,我们的 schema 只有一个名为 hello 的查询,它返回一个字符串“Hello World!”。resolver 函数简单地返回字符串本身。

在您的命令行终端中,输入以下命令,将服务器启动并在浏览器中访问查询 API:

查询 Request

现在,我们的服务器已经运行起来了。通过在浏览器中访问 localhost:4000/graphql,我们可以看到一个名为 GraphQL Playground 的页面。在这个页面的左侧有一个搜索框,可以让我们输入我们想要查询的数据。

输入以下查询:

然后按下“运行查询”按钮。您将会看到类似这样的结果:

现在,我们已经成功地从服务器上完成了我们的第一次 GraphQL 查询。

查询参数

除了查询简单的字符串之外,GraphQL 还支持查询参数。查询参数以变量的形式传递,并可以在定制化查询时使用。

让我们举一个示例,在我们的 schema 中添加一个名为 rollDice 的新查询,该查询将采用一个参数 diceCount 并生成 diceCount 个随机数字。

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

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

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

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

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

在这个代码中,我们添加了一个名为 rollDice 的新查询,并在 numDicenumSides 参数中传递。然后,resolver 函数使用整数数值生成随机数字,并返回一个数字数组。

现在,我们可以在 GraphQL Playground 中,输入以下查询:

我们还需要在下面的 Variables 栏中添加一个变量:

按下“运行查询”按钮,您将获得类似以下结果:

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

现在,我们看到了如何使用 GraphQL 查询语句参数去定制化查询响应,并获得我们希望的结果。

Mutation

除了查询响应之外,GraphQL 还支持数据处理请求。这些称为 Mutation,它们允许我们更改查询数据并向后端服务器提交更改。

让我们修改我们的 schema,添加一个名为 setMessage 的 Mutation,它将采用一个字符串参数,将该字符串设置为“自定义消息”并返回“自定义消息已设置”的字符串响应。

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

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

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

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

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

在 resolver 函数中,我们定义了一个名为 fakeDatabase 的假数据库对象,并在 setMessage 方法中将其使用。其中,传递的 message 将会存储在 fakeDatabase 中,随后返回一个含有相应字符串的响应。

现在,我们可以在 GraphQL Playground 中输入以下 Mutation:

我们的变量是:

按下“运行查询”按钮,您将会获得:

通过上述示例我们可以看到,Mutation 允许我们编写 GraphQL 程序来更改查询数据,提供客户端到服务器的双向通信。

结论

Node.js 和 GraphQL 在现代 Web 开发中发挥着越来越重要和重大的作用。在这个教程中,我们了解了如何将两者一起使用,使用我们的示例代码,您可以立即开始构建自己的 GraphQL 服务器。

希望本文对您有所帮助,谢谢!

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

纠错
反馈