GraphQL Compose Mongoose 使用教程
1. 项目介绍
graphql-compose-mongoose
是一个用于从 Mongoose 模型生成 GraphQL 类型的插件。它不仅能够生成基本的 CRUD 操作的解析器,还支持通过操作符进行基本搜索(如 $lt
, $gt
等)。此外,它还提供了连接和分页等高级功能。
2. 项目快速启动
安装依赖
首先,确保你已经安装了以下依赖:
npm install graphql graphql-compose mongoose graphql-compose-mongoose --save
创建 Mongoose 模型
假设我们有一个 User
模型:
import mongoose from 'mongoose';
const UserSchema = new mongoose.Schema({
name: { type: String, required: true },
age: { type: Number, index: true },
gender: { type: String, enum: ['male', 'female', 'ladyboy'] },
});
const User = mongoose.model('User', UserSchema);
生成 GraphQL 类型和解析器
使用 graphql-compose-mongoose
生成 GraphQL 类型和解析器:
import { composeWithMongoose } from 'graphql-compose-mongoose';
import { schemaComposer } from 'graphql-compose';
// 将 Mongoose 模型转换为 GraphQL 类型
const UserTC = composeWithMongoose(User);
// 添加自定义解析器(可选)
UserTC.addResolver({
name: 'findByName',
type: UserTC,
args: { name: 'String!' },
resolve: ({ args }) => User.findOne({ name: args.name }),
});
// 生成 GraphQL 模式
schemaComposer.Query.addFields({
userById: UserTC.getResolver('findById'),
userByName: UserTC.getResolver('findByName'),
});
const schema = schemaComposer.buildSchema();
启动 GraphQL 服务器
使用 apollo-server
启动 GraphQL 服务器:
import { ApolloServer } from 'apollo-server';
const server = new ApolloServer({ schema });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
3. 应用案例和最佳实践
应用案例
假设我们有一个博客系统,其中包含 User
和 Post
两个模型。我们可以使用 graphql-compose-mongoose
来生成 GraphQL 类型和解析器,并实现用户和文章的 CRUD 操作。
最佳实践
- 类型复用:在多个模型中复用相同的嵌套类型时,确保使用相同的 GraphQL 类型名称,以避免重复定义。
- 自定义解析器:根据业务需求添加自定义解析器,以扩展 GraphQL API 的功能。
- 分页和连接:使用
graphql-compose-connection
和graphql-compose-pagination
插件来实现分页和连接功能。
4. 典型生态项目
- graphql-compose: 核心库,提供了生成 GraphQL 类型的基础功能。
- graphql-compose-mongoose: 本项目,用于从 Mongoose 模型生成 GraphQL 类型。
- graphql-compose-connection: 用于实现 GraphQL 连接(Connection)功能。
- graphql-compose-pagination: 用于实现分页功能。
- graphql-compose-elasticsearch: 用于从 ElasticSearch 索引生成 GraphQL 类型。
通过这些生态项目,你可以构建一个功能强大的 GraphQL API,支持多种数据源和复杂查询。