在 Express 应用下使用 GraphQL 配置 MongoDB

阅读时长 8 分钟读完

前言

MongoDB 是一个开源的 NoSQL 数据库,它有着良好的性能和可扩展性,因此成为了许多应用程序实现数据存储和查询的重要选择。

GraphQL 是一种用于 API 的查询语言和运行时,它可以提高开发效率和查询性能,同时提供了灵活和强大的数据查询和处理方式。

本文将介绍如何在 Express 应用下使用 GraphQL 配置 MongoDB,以及如何使用 GraphQL 和 MongoDB 实现复杂的数据查询和操作。

准备工作

在开始前,请确保你已经安装了以下软件:

  • Node.js
  • MongoDB
  • Visual Studio Code(或其他编辑器)

创建 Express 应用

首先,我们需要创建一个 Express 应用,可以通过以下命令来初始化:

这里使用了 express、graphql、express-graphql 和 mongoose 这几个 npm 包,分别是 Express 框架、GraphQL 和 MongoDB 连接的必要组件。

初始化后,我们新建一个 index.js 文件,在其中编写下面代码:

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

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

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

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

这里我们创建了一个 Express 应用,使用 graphqlHTTP 中间件在 /graphql 路径下创建了一个 GraphQL API,其中定义了一个名为 hello 的查询字段,它返回了字符串 Hello World

运行以下命令启动应用:

打开浏览器访问 http://localhost:3000/graphql,可以看到 GraphQL Playground 界面,我们可以在左侧的查询面板中输入 GraphQL 查询语句,点击右侧的运行按钮来执行查询。在查询面板上方还有一个 schema 面板,可以帮助我们查看和了解数据类型和结构。

在查询面板中输入以下查询语句:

点击运行按钮,可以得到如下结果:

这表明我们成功创建了一个 GraphQL API,并使用了一个基本的查询字段。

配置 MongoDB

接下来我们需要配置 MongoDB 数据库,用于存储数据。

首先,我们创建一个 config.js 文件,用于配置 MongoDB 的连接信息:

这里定义了 MongoDB 的连接 URL 和一些选项,例如数据库名称和鉴权等信息。

然后,我们新建一个 database.js 文件,来创建 MongoDB 的数据库连接:

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

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

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

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

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

这里使用了 mongoose 这个 npm 包来连接和操作 MongoDB 数据库。我们通过 mongoose.connect() 方法来连接 MongoDB 数据库,并使用 mongoose.connection 对象来监控连接成功和失败的事件。

现在,我们可以在 index.js 中引入 database.js 文件,并在应用启动的时候初始化 MongoDB 连接:

创建 GraphQL 数据类型和查询

接下来,我们需要使用 GraphQL 定义数据类型和查询,从 MongoDB 中获取数据。

我们以一个简单的例子来说明,我们假设我们有一个名为 book 的集合,它包含了每本书的名字、作者、出版日期等信息。

models 目录中,我们新建一个 book.js 文件,定义一个 Book 数据模型:

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

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

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

这里,我们使用 mongoose.Schema() 方法来定义了一个包含字段 nameauthorpublishDate 的数据模型,并导出了一个名为 Book 的模型对象。

接下来,我们在 index.js 文件中定义数据类型和查询:

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

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

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

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

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

这里我们定义了一个 bookType,它定义了 Book 数据模型的字段和类型;然后我们定义了一个 queryType,它定义了查询类型和查询语句,例如 books 查询字段,它返回了一个 Book 集合中的所有书籍;最后,我们将 queryType 定义的 Schema 对象传给了 graphqlHTTP 中间件的 schema 参数。

在查询面板中输入以下查询语句:

点击运行按钮,可以查询到所有的书籍的名字、作者和出版日期。

这里,我们成功连接了 MongoDB 数据库,使用了 GraphQL 查询语言来查询数据库中的数据。接下来,你可以根据业务需求,添加更多的数据类型和查询类型,来实现更加复杂的数据操作。

总结

本文介绍了如何在 Express 应用下使用 GraphQL 配置 MongoDB,从而实现了基于 GraphQL 和 MongoDB 的数据查询和操作。我们首先创建了一个 Express 应用,然后使用 mongoose 连接了 MongoDB 数据库,最后通过定义数据类型和查询实现了对 MongoDB 数据库的数据操作。

GraphQL 和 MongoDB 的优势相当明显,GraphQL 可以提供更加灵活和强大的查询能力,而 MongoDB 则可以提供更好的性能和可扩展性。他们在开发中的配合可以为我们带来更高的效率和更好的用户体验。

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

纠错
反馈