首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在GraphQL中使用Typegoose

在GraphQL中使用Typegoose可以帮助你更方便地定义和操作MongoDB中的数据模型。Typegoose是一个基于TypeScript的库,它简化了使用Mongoose定义和操作MongoDB数据模型的过程。结合GraphQL,你可以创建一个强类型的API来查询和操作这些数据。

以下是一个示例,展示了如何在GraphQL中使用Typegoose。

安装依赖

首先,确保你已经安装了必要的依赖项:

代码语言:javascript
复制
npm install @typegoose/typegoose mongoose graphql express express-graphql
npm install @types/express @types/graphql @types/node typescript ts-node

创建Typegoose模型

创建一个Typegoose模型来定义MongoDB中的数据结构。

代码语言:javascript
复制
// 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

定义GraphQL Schema来描述API的结构。

代码语言:javascript
复制
// 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

创建Resolvers来处理GraphQL查询和变更。

代码语言:javascript
复制
// 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和express-graphql中间件来创建GraphQL服务器。

代码语言:javascript
复制
// 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,然后运行服务器:

代码语言:javascript
复制
ts-node server.ts

测试GraphQL API

打开浏览器,访问http://localhost:4000/graphql,你可以使用GraphiQL界面来测试你的GraphQL API。例如:

查询所有用户

代码语言:javascript
复制
query {
  getUsers {
    id
    name
    email
  }
}

创建新用户

代码语言:javascript
复制
mutation {
  createUser(name: "John Doe", email: "john.doe@example.com") {
    id
    name
    email
  }
}

查询单个用户

代码语言:javascript
复制
query {
  getUser(id: "USER_ID_HERE") {
    id
    name
    email
  }
}

解释

  1. Typegoose模型:使用Typegoose定义MongoDB中的数据模型。
  2. GraphQL Schema:定义GraphQL Schema来描述API的结构。
  3. Resolvers:创建Resolvers来处理GraphQL查询和变更。
  4. Express服务器:使用Express和express-graphql中间件来创建GraphQL服务器。
  5. 测试API:使用GraphiQL界面测试GraphQL API。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券