示例
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 {
// 根据父字段的值来返回帖子的作者
}
}- 对于关联类型,非常适合使用dataloader来解决n+1问题