在GraphQL中使用Typegoose可以帮助你更方便地定义和操作MongoDB中的数据模型。Typegoose是一个基于TypeScript的库,它简化了使用Mongoose定义和操作MongoDB数据模型的过程。结合GraphQL,你可以创建一个强类型的API来查询和操作这些数据。
以下是一个示例,展示了如何在GraphQL中使用Typegoose。
首先,确保你已经安装了必要的依赖项:
npm install @typegoose/typegoose mongoose graphql express express-graphql
npm install @types/express @types/graphql @types/node typescript ts-node
创建一个Typegoose模型来定义MongoDB中的数据结构。
// models/User.ts
import { prop, getModelForClass } from '@typegoose/typegoose';
class User {
@prop({ required: true })
public name!: string;
@prop({ required: true })
public email!: string;
}
const UserModel = getModelForClass(User);
export { User, UserModel };
定义GraphQL Schema来描述API的结构。
// schema.ts
import { buildSchema } from 'graphql';
const schema = buildSchema(`
type User {
id: ID!
name: String!
email: String!
}
type Query {
getUser(id: ID!): User
getUsers: [User]
}
type Mutation {
createUser(name: String!, email: String!): User
}
`);
export { schema };
创建Resolvers来处理GraphQL查询和变更。
// resolvers.ts
import { UserModel } from './models/User';
const resolvers = {
getUser: async ({ id }: { id: string }) => {
return await UserModel.findById(id);
},
getUsers: async () => {
return await UserModel.find();
},
createUser: async ({ name, email }: { name: string, email: string }) => {
const user = new UserModel({ name, email });
await user.save();
return user;
}
};
export { resolvers };
使用Express和express-graphql中间件来创建GraphQL服务器。
// server.ts
import express from 'express';
import { graphqlHTTP } from 'express-graphql';
import mongoose from 'mongoose';
import { schema } from './schema';
import { resolvers } from './resolvers';
const app = express();
const PORT = 4000;
// 连接到MongoDB
mongoose.connect('mongodb://localhost:27017/typegoose_graphql', {
useNewUrlParser: true,
useUnifiedTopology: true,
}).then(() => {
console.log('Connected to MongoDB');
}).catch(err => {
console.error('Failed to connect to MongoDB', err);
});
// 设置GraphQL中间件
app.use('/graphql', graphqlHTTP({
schema,
rootValue: resolvers,
graphiql: true,
}));
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}/graphql`);
});
确保你已经安装了TypeScript和ts-node,然后运行服务器:
ts-node server.ts
打开浏览器,访问http://localhost:4000/graphql
,你可以使用GraphiQL界面来测试你的GraphQL API。例如:
query {
getUsers {
id
name
email
}
}
mutation {
createUser(name: "John Doe", email: "john.doe@example.com") {
id
name
email
}
}
query {
getUser(id: "USER_ID_HERE") {
id
name
email
}
}
算法大赛
云+社区沙龙online第5期[架构演进]
微服务平台TSF系列直播
Tencent Serverless Hours 第13期
企业创新在线学堂
API网关系列直播
领取专属 10元无门槛券
手把手带您无忧上云