如何在 GraphQL 中使用 MySQL

阅读时长 12 分钟读完

GraphQL 是一种前端数据查询语言,它允许客户端应用程序明确地声明其数据需要,并从服务器获取完全居中的、可组合的数据响应。而 MySQL 是一款最流行的关系型数据库管理系统,在 Web 应用程序开发中广泛使用。在这篇文章中,我们将向大家介绍如何在 GraphQL 中使用 MySQL。

准备工作

在开始我们的教程之前,需要准备以下工具和环境:

  • Node.js
  • MySQL 数据库
  • GraphQL
  • Sequelize

如果您已经装好了 Node.js 和 MySQL 数据库,您可以使用以下命令安装 GraphQL 和 Sequelize:

数据库连接

在使用 Sequelize 进行数据库操作之前,我们需要建立数据库连接。

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

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

其中,database_nameusernamepassword 分别为您的数据库名称、用户名和密码。

数据库模型

为了访问数据库中的表,我们需要定义 Sequelize 模型。模型是具有属性和行为的对象,通常对应于数据库中的表。

在本教程中,我们创建一个 Blog 表,其中包括 idtitlecontentcreatedAt 四个属性。您可以使用以下命令创建一个名为 Blog 的 Sequelize 模型。

然后,如下所示定义模型:

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

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

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

GraphQL Schema

在 GraphQL 中,我们需要定义一个 Schema,定义应用程序支持的查询和修改操作。我们为 Blog 表创建 GraphQL Schema,包括查询和添加记录功能。为了简单起见,我们不定义修改和删除记录的操作。

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

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

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

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

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

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

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

其中,blogsblog 分别为查询所有博客和根据 ID 查询单个博客的接口。addBlog 为添加博客的接口。

GraphQL Server

最后,在 Express 中使用 GraphQL。我们需要将 GraphQL 和 Sequelize 一起使用,以便在 GraphQL Schema 中将数据源定义为 Sequelize 模型。

以下是 GraphQL Server 的完整代码:

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

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

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

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

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

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

在上述代码中,我们使用 graphqlHTTP 中间件来创建 GraphQL 服务,并将返回的模式转换为可执行模式。我们还向解析器上下文添加 Sequelize 实例,以便在 GraphQL Resolver 中使用。

示例代码

在上述的示例代码中,我们创建了一个名为 Blog 的 Sequelize 数据库模型,定义了 GraphQL Schema 和 Resolver,并为 Express 应用程序创建了 GraphQL Server。下面是完整的示例代码:

定义 Sequelize 模型

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

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

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

定义 GraphQL Schema

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

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

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

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

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

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

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

创建 GraphQL 服务器

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

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

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

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

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

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

结论

本文介绍了如何在 GraphQL 中使用 MySQL 数据库。我们使用 Sequelize 定义了模型,使用 GraphQL Schema 和 Resolver 定义了数据源,并且创建了 GraphQL 服务器。通过这个简单的例子,您应该了解到如何将 GraphQL 和关系型数据库管理系统结合使用,并可以扩展应用程序以支持更多功能。

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

纠错
反馈