如何使用 Express.js 构建可扩展的 GraphQL API?

阅读时长 8 分钟读完

Express.js 是一个广受欢迎的 Node.js Web 框架,通过使用它可以轻松构建服务器端应用程序。GraphQL 是一个用于构建 API 的查询语言,它使用类型系统来定义 API 的能力,并提供了一种更高效和强大的方式来获取您应用程序中的数据。在此文中,我们将探讨如何使用 Express.js 和 GraphQL 构建可扩展的 API。

设置 Express.js 服务器

首先,我们需要安装和设置 Express.js 服务器。我们将使用以下命令安装 Express.js 以及其他所需的依赖项:

接下来,我们将创建一个名为 server.js 的文件,以设置 Express.js 服务器:

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

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

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

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

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

---------------- -- -- -
  -------------------- ------- ------ --- ------- -- -------------------------
---
展开代码

其中,我们构建了一个作为根节点的查询对象,该对象具有一个名称为 hello 的字段。我们还定义了一个名为 rootValue 的对象,该对象定义了 hello 字段的解析函数,该函数将返回字符串“Hello, World!”。通过将 schemarootValue 传递给 graphqlHTTP,我们将 GraphQL API 集成到了 Express.js 服务器中。

访问 localhost:4000/graphql,您应该能够看到 GraphQL Playground 工具,并且输入以下查询:

应该会返回以下响应:

扩展 GraphQL API

现在我们已经有了基本的 GraphQL API,我们可以通过扩展它来实现更多的功能。让我们从一个简单的例子开始,我们将通过添加一个名为 person 的字段来扩展查询对象,该字段将返回一个人的姓名和年龄。

首先,我们将修改 schema,以包含一个名为 person 的对象类型,并包含姓名和年龄字段:

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

  ---- ------ -
    ----- ------
    ---- ---
  -
---
展开代码

接下来,我们将定义一个名为 person 的根解析函数,该函数将返回一个包含姓名和年龄的对象:

现在,您可以输入以下查询并执行:

应该会返回以下响应:

连接到数据库

大多数实际使用的 API 都需要从某种数据库中读取和写入数据。让我们探索如何集成 MongoDB 数据库与我们的 GraphQL API,以读取和写入人员数据。

首先,我们需要安装与 MongoDB 的 Node.js 驱动程序,使用以下命令安装 mongodb

接下来,我们将导入 MongoDB 驱动程序并建立一个与数据库的连接:

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

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

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

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

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

  -------- - ------------------
---
展开代码

现在,我们已经连接到数据库。现在,我们将定义一个查询以获取所有人员,我们将查询 Mongo 数据库中的 persons 集合所包含的所有文档:

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

  -------- ----- -- -- -
    ----- ------- - ----- ------------------------------------------------
    ------ --------
  -
--
展开代码

我们还定义了一个名为 persons 的字段作为查询类型。 当用户查询此字段时,我们将使用 MongoDB 驱动程序来检索 persons 集合中的所有文档并将其作为 JSON 对象返回。

现在,我们已经完成了我们的 GraphQL API,其中包含了 hellopersonpersons 字段,persons 字段通过 MongoDB 驱动程序从表中检索所有人员数据。

以下是 server.js 中的完整代码:

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

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

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

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

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

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

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

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

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

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

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

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

---------------- -- -- -
  -------------------- ------- ------ --- ------- -- -------------------------
---
展开代码

通过实现此例,您应该能够更好地了解如何使用 Express.js 和 GraphQL 构建可扩展的 API。

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

纠错
反馈

纠错反馈