GraphQL 是一种前端数据查询语言,它允许客户端应用程序明确地声明其数据需要,并从服务器获取完全居中的、可组合的数据响应。而 MySQL 是一款最流行的关系型数据库管理系统,在 Web 应用程序开发中广泛使用。在这篇文章中,我们将向大家介绍如何在 GraphQL 中使用 MySQL。
准备工作
在开始我们的教程之前,需要准备以下工具和环境:
- Node.js
- MySQL 数据库
- GraphQL
- Sequelize
如果您已经装好了 Node.js 和 MySQL 数据库,您可以使用以下命令安装 GraphQL 和 Sequelize:
npm install graphql sequelize sequelize-cli mysql2 --save
数据库连接
在使用 Sequelize 进行数据库操作之前,我们需要建立数据库连接。
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - --- -------------------------- ----------- ----------- - ----- ------------ -------- -------- ----- - ---- -- ---- -- -------- ------ ----- ----- - ---
其中,database_name
、username
和 password
分别为您的数据库名称、用户名和密码。
数据库模型
为了访问数据库中的表,我们需要定义 Sequelize 模型。模型是具有属性和行为的对象,通常对应于数据库中的表。
在本教程中,我们创建一个 Blog
表,其中包括 id
、title
、content
和 createdAt
四个属性。您可以使用以下命令创建一个名为 Blog
的 Sequelize 模型。
sequelize model:create --name Blog --attributes 'id:INTEGER,title:STRING,content:TEXT,createdAt:DATETIME'
然后,如下所示定义模型:
-- -------------------- ---- ------- ----- - ------ --------- - - --------------------- ----- ---- ------- ----- -- ----------- --- - ----- ------------------ ----------- ----- -------------- ---- -- ------ - ----- ----------------- ---------- ----- -- -------- - ----- --------------- ---------- ----- -- ---------- - ----- --------------- ---------- ------ ------------- ------------- - -- - ---------- ---------- ------ --- -------------- - -----
GraphQL Schema
在 GraphQL 中,我们需要定义一个 Schema,定义应用程序支持的查询和修改操作。我们为 Blog
表创建 GraphQL Schema,包括查询和添加记录功能。为了简单起见,我们不定义修改和删除记录的操作。
-- -------------------- ---- ------- ----- - ------------------ -------------- ----------- --------------- ------------ ------------- - - ------------------- ----- ---- - -------------------------- ----- -------- - --- ------------------- ----- ------- ------- -- -- -- --- - ----- ---------- -- ------ - ----- ------------- -- -------- - ----- ------------- -- ---------- - ----- ------------- - -- --- ----- --------- - --- ------------------- ----- -------- ------- -- -- -- ------ - ----- --- ---------------------- -------- ----- -- -- ----- -------------- -- ----- - ----- --------- ----- - --- - ----- -------------------------- - -- -------- ----- --- ----- -- ----- ---------------------- - -- --- ----- ------------ - --- ------------------- ----- ----------- ------- -- -- -- -------- - ----- --------- ----- - ------ - ----- ----------------------------- -- -------- - ----- ----------------------------- - -- -------- ----- --- ----- -- ----- ----------------- - -- --- ----- ------ - --- --------------- ------ ---------- --------- ------------ --- -------------- - -------
其中,blogs
和 blog
分别为查询所有博客和根据 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