在前端开发过程中,我们经常需要与后端进行数据的交互。传统的前后端交互方式一般采用 RESTful API,但是 RESTful API 有一些缺点,例如需要多次请求来获取数据,数据量大时影响性能等。GraphQL 可以更好地解决这些问题,它可以让前端开发人员通过一次请求来获取服务端所有需要的数据,并且可以精确控制返回的数据内容。
Mongoose 是 Node.js 的 MongoDB 对象模型工具,它可以帮助我们更方便地操作 MongoDB 数据库,也可以优化与 MongoDB 的交互效率。 在本篇文章中,我们将介绍如何使用 Mongoose 和 GraphQL 结合实现 API 的过程。
安装
首先,我们需要安装 Mongoose 和 GraphQL 以及一些相关的依赖库。
npm install mongoose graphql graphql-compose graphql-compose-mongoose express express-graphql body-parser --save
连接 MongoDB
我们需要先连接 MongoDB,使用 Mongoose 提供的 connect
方法即可。在连接 MongoDB 之前,我们需要先定义数据模型,用于描述我们要在 MongoDB 中存储的数据结构。在本文中,我们将定义一个简单的书籍数据模型。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ------ - ----- ------- --------- ----- ----- ----- -- ------- - ----- ------- --------- ----- ----- ----- -- ------------ - ----- ------- --------- ----- ----- ----- -- ---------- - ----- ----- --------- ----- -- --- ----- ---- - ---------------------- ------------ -------------- - -----
接下来,我们在 app.js 文件中连接 MongoDB:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- - ----------- - - --------------------------- ----- - ------------------- - - ------------------------------------ ----- - -------------- - - --------------------------- ----- --- - ---------- -------------------------------------------------------------- - ---------------- ----- ------------------- ----- ---------- -- - -------------------- ------------- -------------- -- - ----------------- --- --------------------------- ------------------- ------------- ------- ----------------------------- --------- ----- ---- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
定义 GraphQL Schema
接下来,我们需要定义 GraphQL 的 Schema。使用 graphql-compose-mongoose
库可以快速方便地将 Mongoose 模型转换为 GraphQL 类型,并且自动生成相应的输入类型和过滤类型,大大简化开发。 在 app.js 中加入以下代码:
-- -------------------- ---- ------- ----- -------------------- - --- -- ---- -- ----- --- ----------- --------- ----- ----- ------ - ------------------------- ---------------------- -------------------------------- --------- ------------------------------- -------- ------------------------------ --------- ------------------------------- ---------- ---------------------------- --- ----------------------------------- -------------- -------------------------------- --------------- --------------------------------- --------------- --------------------------------- ---
在上面的代码中,我们首先使用 composeWithMongoose
将 Mongoose 的 Book 模型转换为 GraphQL 类型,然后在 Schema 中定义数据查询和修改的 Resolver。
定义 GraphQL 查询
在我们定义好 GraphQL Schema 后,我们就可以通过 GraphQL 查询来获取数据。下面是一个查询例子,它会返回所有作者为 "Jack" 的书籍的标题和描述。
query { bookMany(filter: { author: "Jack" }) { title, description } }
在浏览器访问 http://localhost:3000/graphql,运行以上查询,在 graphiql 界面可以得到以下结果:
-- -------------------- ---- ------- - ------- - ----------- - - -------- ----- ----- -------------- ------------ --- ---- ---- -- - -------- ----- ----- -------------- ------------ --- ---- ---- - - - -
定义 GraphQL Mutation
在 GraphQL 中,我们可以使用 Mutation 来进行数据添加、修改和删除等操作。下面是一个添加新书籍的 Mutation 例子。
-- -------------------- ---- ------- -------- - --------------------- - ------ ---- ------ ------- ------- ------------ ------------ --- --- ------ ---------- -------------------------- -- - ------ - --- ----- ------ ----------- --------- - - -
在浏览器访问 http://localhost:3000/graphql,运行以上查询,在 graphiql 界面可以得到以下结果:
-- -------------------- ---- ------- - ------- - ---------------- - --------- - ------ --------------------------- -------- ---- ------ --------- ------- -------------- ------------ --- --- ------ ------------ -------------------------- - - - -
总结
本文介绍了如何使用 Mongoose 和 GraphQL 结合实现 API 的过程。通过使用 Mongoose 和 GraphQL,我们可以更方便地操作 MongoDB 数据库,同时可以使用 GraphQL 的优势进行数据查询和修改。这种集成方案可以减少前后端交互次数,并且可以更精确地控制返回的数据内容,从而提高了应用程序的性能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c866025ad90b6d04137abc