简介
@sherbst/mongoose-to-graphql 是一个开源的 npm 包,用于快速将 MongoDB 数据库中的数据转换为 GraphQL 数据类型。
GraphQL 是一个由 Facebook 开发的数据查询和操作语言,可用于构建高效的 API。而 MongoDB 是具有高可扩展性和灵活性的 NoSQL 数据库。
@sherbst/mongoose-to-graphql 可以让前端开发人员更加便捷地使用 GraphQL 和 MongoDB。
本文将讲解如何使用 @sherbst/mongoose-to-graphql 包来转换 MongoDB 数据为 GraphQL 数据。
安装和设置
首先,通过 npm 安装 @sherbst/mongoose-to-graphql 包:
$ npm install @sherbst/mongoose-to-graphql
在项目中引入该包:
const mongooseToGraphQL = require('@sherbst/mongoose-to-graphql');
转换过程
假设你已有一个 MongoDB 数据库,其中存储着用户信息的集合名为 user,其中的文档如下:
{ "_id": { "$oid": "615aa2763100b5e2e9f5dd5f" }, "username": "johndoe", "email": "johndoe@gmail.com", "password": "password123" }
接下来,创建一个名为 User 的 Mongoose 模型,用于与 MongoDB 中的 user 集合进行交互:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- --------- ------- ------ ------- --------- ------ --- ----- ---- - ---------------------- ------------
然后,通过 @sherbst/mongoose-to-graphql 中的方法 createGraphQLType 将 Mongoose 模型转换为 GraphQL 类型:
const userGraphQLType = mongooseToGraphQL.createGraphQLType({ name: 'user', model: User, exclude: ['password'] });
在转换过程中,我们通过传入 name、model 和 exclude 三个参数来指定创建的 GraphQL 类型名称、MongoDB 模型以及要排除的属性。
最后,我们可以将 User 的查询和操作方法与转换后的 GraphQL 类型进行关联,以便在 GraphQL 查询中使用它们:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - --- --------------------------- ----- ------- ------- -- -- -- ---- - ----- ----------------- -- --------- - ----- --------------------- -- ------ - ----- --------------------- -- -- --- ----- --------- - - ----- --- ------------------------------ -------- -- -- ------------------ -- ----- ------------ - - -------- - ----- --------- ----- - --------- - ----- --------------------- -- ------ - ----- --------------------- -- -- -------- --- - --------- ----- -- -- ---- ------ --------- ----- ---------- -- -- ----- ------ - --- ----------------------- ------ --- --------------------------- ----- -------- ------- - ----- ---------- - --- --------- --- --------------------------- ----- ----------- ------- - ----- ------------- - -- ---
这里我们创建了一个名为 User 的 GraphQL 类型,包含 _id、username、email 三个字段。
然后,我们创建了两个操作方法:userQuery 和 userMutation。在 userQuery 中,我们查找了所有的 User 数据;在 userMutation 中,我们定义了一个添加 User 的方法。
最后,我们将 userQuery 和 userMutation 加入 GraphQL schema 中。
运行示例
为了更好地理解 @sherbst/mongoose-to-graphql 的使用方法,这里提供一份完整的示例代码。
首先,建立 MongoDB 连接:
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/graphql-demo');
然后,创建一个名为 UserModel 的模型,用于与 MongoDB 中的 user 集合进行交互:
const userSchema = new mongoose.Schema({ username: String, email: String, password: String }); const UserModel = mongoose.model('User', userSchema);
接下来,创建一个名为 userGraphQLType 的 GraphQL 类型,用于表示从 MongoDB 中查询到的 User 数据,并排除了 password 字段:
const userGraphQLType = mongooseToGraphQL.createGraphQLType({ name: 'user', model: UserModel, exclude: ['password'] });
然后,创建一个 getAllUsers 的操作方法,用于在 GraphQL 中查询所有的 User 数据:
const userQuery = { type: new graphql.GraphQLList(userGraphQLType), resolve: () => UserModel.find().exec() };
最后,创建一个 addUser 的操作方法,用于在 GraphQL 中添加新的 User 数据:
-- -------------------- ---- ------- ----- ------------ - - -------- - ----- ---------------- ----- - --------- - ----- --------------------- -- ------ - ----- --------------------- -- -- -------- --- - --------- ----- -- -- ---- ----------- --------- ----- ---------- -- --
将 userQuery 和 userMutation 加入到 GraphQL schema 中:
-- -------------------- ---- ------- ----- ------ - --- ----------------------- ------ --- --------------------------- ----- -------- ------- - ----- ---------- - --- --------- --- --------------------------- ----- ----------- ------- - ----- ------------- - -- ---
最后,监听本地端口并启动服务:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - --------------------------- ----- --- - ---------- ------------------- ------------- ------- ------- --------- ---- ---- ---------------- -- -- - -------------------- ------ ------- -- -------------------------------- ---
现在,启动项目并在浏览器中访问 http://localhost:3000/graphql ,就可以进行 GraphQL 的查询和操作了。
总结
通过 @sherbst/mongoose-to-graphql 包,前端开发人员可以在使用 MongoDB 数据库的情况下更加方便地使用 GraphQL,提升开发效率。
总的来说,使用该包的步骤如下:
- 建立 MongoDB 连接。
- 创建 Mongoose 模型。
- 调用 createGraphQLType 方法生成 GraphQL 类型。
- 将操作方法与生成的 GraphQL 类型关联,添加到 schema 中。
- 启动 GraphQL 服务后进行查询和操作。
在实际的开发中,我们还可以根据不同的需求调整 @sherbst/mongoose-to-graphql 的选项,定制适合自身工程项目的 GraphQL Schema。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6006733f890c4f7277583673