GraphQL 是一种 API 查询语言和运行时环境,用于查询 API 的数据。而 Mongoose 是一个在 Node.js 中操作 MongoDB 数据库的工具,通过编写 Schema 然后创建 Model,便可对 MongoDB 数据库进行增删改查操作。在本文中,我们将探讨如何在 Mongoose 中使用 GraphQL 进行查询和变更。
环境搭建
在使用 Mongoose 和 GraphQL 进行开发之前,你需要先搭建好开发环境。以下是搭建环境的步骤:
你需要先安装 Node.js,在 Node.js 官网 下载安装包并进行安装。
在项目文件夹下打开终端,执行以下命令来初始化项目:
npm init
根据提示输入项目名称、版本号等信息来生成 package.json 文件。
安装依赖包:
npm install mongoose graphql express express-graphql
这里我们使用的是 mongoose 和 graphql,后面的 express 和 express-graphql 是搭建 GraphQL 服务器所需要的库。
创建 Schema
在使用 Mongoose 和 GraphQL 进行开发之前,我们需要先创建 Schema。Schema 定义了数据的结构和类型,与 GraphQL 中的 Schema 比较类似。
在项目文件夹下创建名为 models
的文件夹,在 models
文件夹下创建名为 user.js
的文件,代码如下:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- ------- ------ ------- ---- ------- --- -------------- - ---------------------- ------------
这里我们定义了 User
的结构和类型,包括 name
、email
和 age
三个字段。然后将 UserSchema
导出为一个 User
的 model。
创建 GraphQL Schema
在 app.js
或者 server.js
文件中创建 GraphQL Schema。Schema 是 GraphQL 中的重要概念,用于定义 GraphQL API 中的数据类型、字段、查询和变更等。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - --------------------------- ----- - ----------- - - ------------------- ----- -------- - -------------------- ----- --- - ---------- ---------------------------------------------------- - ---------------- ---- --- ------------------------------- --------------------------- -------- --------- ----- ---- - ------------------------- ----- ------ - ------------- ---- ---- - --- -- ----- ------ ------ ------ ---- --- - ----- --------- - ----- ------ ------ ------ ---- --- - ---- ----- - ------ ------ -------- ----- ---- - ---- -------- - ----------------- ------------ ---- -------------- ---- ------ ------------ ---- -------------- ----- ---- - ------ - ------ ----- --------- -------- - --- ----- ---- - - ------ ----- -- -- - ----- ----- - ----- ------------ ------ ------ -- ----- ----- -- -- -- -- - ----- ---- - ----- ------------------ ------ ----- -- ----------- ----- -- ----- -- -- - ----- ---- - ----- ------------------- ------ ----- -- ----------- ----- -- --- ----- -- -- - ----- ---- - ----- -------------------------- ------ - ---- ---- --- ------ ----- -- ----------- ----- -- -- -- -- - ----- ---- - ----- --------------------------- ------ ----- -- -- ------------------- ------------- ------- ---------- ----- --------- ----- ---- ---------------- -- -- - -------------------- ----------- -------- ---
其中,buildSchema
方法用于创建 GraphQL Schema。在 Schema 中,我们定义了 User
类型、 Query
类型、 Mutation
类型。User
类型定义了 id
、name
、email
和 age
四个字段, Query
类型定义了 users
字段和 user
字段, Mutation
类型定义了 createUser
、updateUser
和 deleteUser
三个字段。
接着,在 root
变量中定义了各个字段的解析器函数。例如,在 users
字段的解析器函数中,我们使用 Mongoose 的 find
方法查询数据库中的所有用户,然后将查询结果返回。在 createUser
字段的解析器函数中,我们使用 Mongoose 的 create
方法创建一条新用户记录,并返回创建的用户信息。
最后,使用 graphqlHTTP
中间件将 GraphQL Schema 注册到 Express 中。
查询和变更
接下来,我们使用 GraphiQL 来测试 GraphQL API。GraphiQL 是一款 GraphQL 的 IDE 工具,可以进行 API 接口测试和调试。
在浏览器中输入 http://localhost:3000/graphql
开启 GraphiQL 工具。然后输入以下代码进行测试:
查询所有用户
{ users { id name email age } }
根据 ID 查询用户
{ user(id: "5e56c9b5e05f921c90ecee20") { id name email age } }
创建用户
-- -------------------- ---- ------- -------- - ----------------- - ----- ------- ------ ------------------- ---- -- -- - -- ---- ----- --- - -
更新用户
-- -------------------- ---- ------- -------- - -------------- --------------------------- ------ - ----- --------------- ------ --------------------------- ---- -- -- - -- ---- ----- --- - -
删除用户
mutation { deleteUser(id: "5e56d13b02f8332144d119dd") { id name email age } }
以上查询和变更操作应该可以成功。
结论
GraphQL 是一个非常强大的 API 查询语言,通过结合 Mongoose,我们可以轻松地使用 GraphQL 来操作 MongoDB 数据库。在实际项目中,使用 GraphQL 可以提高 API 的效率和灵活性,同时减少开发工作量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670398ddd91dce0dc84bbc78