示例

NestJs

配置 GraphQL 模块: 在你的主模块(例如 app.module.ts)中导入并配置 GraphQLModule

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { join } from 'path';
@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
    }),
  ],
})
export class AppModule {}

定义 GraphQL 类型: 创建用户(User)和帖子(Post)类型,并定义它们之间的关系。 TypeScript

import { ObjectType, Field, Int, ID } from '@nestjs/graphql';
@ObjectType()
export class User {
  @Field(type => ID)
  id: number;
  @Field()
  name: string;
  @Field(type => [Post])
  posts: Post[];
}
@ObjectType()
export class Post {
  @Field(type => ID)
  id: number;
  @Field()
  title: string;
  @Field()
  content: string;
  @Field(type => User)
  author: User;
}

创建 Resolver: 创建用户和帖子解析器,处理查询和变更。

import { Resolver, Query, Mutation, Args, ResolveField, Parent } from '@nestjs/graphql';
import { User } from './user.model';
import { Post } from './post.model';
 
@Resolver(of => User)
export class UserResolver {
  @Query(returns => [User])
  users(): User[] {
    // 返回用户列表
  }
 
  @ResolveField(returns => [Post])
  posts(@Parent() user: User): Post[] {
    // 根据父字段user的请求相应值返回用户的帖子列表
  }
}
 
@Resolver(of => Post)
export class PostResolver {
  @Query(returns => [Post])
  posts(): Post[] {
    // 返回帖子列表
  }
 
  @Mutation(returns => Post)
  createPost(@Args('title') title: string, @Args('content') content: string, @Args('authorId') authorId: number): Post {
    // 创建并返回新帖子
  }
 
  @ResolveField(returns => User)
  author(@Parent() post: Post): User {
    // 根据父字段的值来返回帖子的作者
  }
}