在 GraphQL 中连接 MongoDB 数据库

在GraphQL中连接MongoDB数据库

GraphQL是一种查询语言和运行时环境,用于API开发。它允许客户端准确地说明其数据需求,从而最大程度地减少了数据传输量。MongoDB是一种面向文档的NoSQL数据库,它与GraphQL结合使用可以使我们轻松构建高效的API服务。在本文中,我们将介绍如何在GraphQL中连接MongoDB数据库。

安装必要的软件包

我们需要在项目中安装一些必要的软件包才能使用GraphQL和MongoDB。我们可以使用npm来安装这些软件包。首先,我们需要在项目目录下打开终端并运行以下命令来初始化npm项目:

--- ---- --

然后,我们需要安装以下软件包:

  • graphql:用于定义GraphQL schema和resolver。
  • graphql-tools:用于将GraphQL schema与resolver结合起来。
  • mongoose:用于连接MongoDB数据库。
  • express:用于生成HTTP server。
  • graphql-express:用于将GraphQL endpoint添加到HTTP server中。

运行以下命令来安装这些软件包:

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

连接MongoDB数据库

我们需要连接MongoDB数据库来获取或修改数据。为此,在我们的代码中,我们需要提供MongoDB数据库连接URL和数据库名称,并通过mongoose连接到它。在以下示例中,我们将MongoDB数据库连接URL保留为空,并通过环境变量设置它。在实际应用中,我们应该为生产环境和测试环境设置不同的连接URL。

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

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

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

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

定义GraphQL schema

GraphQL schema用于定义可查询的字段和数据类型以及它们之间的关联。在以下示例中,我们定义了一个Post数据类型,该类型包含_id、title、content和published字段。我们还定义了一些可查询的字段,例如getPost和getPosts。这些查询将在后面的步骤中定义其解析器。

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

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

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

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

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

定义GraphQL resolver

GraphQL resolver用于定义可查询字段的逻辑。在以下示例中,我们定义了getPost和getPosts查询的解析程序。getPost查询将根据提供的ID返回单个Post。getPosts查询将返回所有的Post。

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

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

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

将GraphQL schema与resolver结合起来

我们使用graphql-tools软件包将GraphQL schema和resolver结合在一起。在以下示例中,我们将typeDefs和resolvers导入makeExecutableSchema函数中,该函数将它们组合成一个可执行的GraphQL schema。

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

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

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

将GraphQL endpoint添加到HTTP server

我们需要将GraphQL endpoint添加到HTTP server中。在以下示例中,我们使用express和graphql-express软件包来定义GraphQL endpoint(/graphql)和HTTP server。我们将GraphQL schema作为参数传递给graphql-express中间件,并将该中间件添加到HTTP server中。

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

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

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

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

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

测试GraphQL endpoint

现在我们已经完成了连接MongoDB数据库和定义GraphQL endpoint所需的所有步骤。让我们通过以下查询测试GraphQL endpoint是否正常工作:

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

如果一切正常,该查询将返回所有的Post中的_id和title字段。

结论

在本文中,我们介绍了如何在简单的GraphQL server中连接MongoDB数据库。我们讨论了必要的软件包并提供了示例代码。我们可以使用这个基本的GraphQL server与MongoDB集成,以构建更复杂的API服务。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67300a0feedcc8a97c90e8d0