Nestjs教程使用TypeGraphQL构建GraphQL API

我正在学习使用NestJS和TypeGraphQL构建GraphQL API,但在实际开发中遇到了一些问题:

  1. 如何正确配置TypeGraphQL与NestJS的集成?官方文档的说明不太清晰,能否给出具体的代码示例?
  2. 在使用TypeGraphQL时,如何优雅地处理复杂的Resolver依赖注入?比如需要同时注入多个Service的情况。
  3. 对于GraphQL的输入类型(InputType)和返回类型(ObjectType),在实际项目中有什么最佳实践吗?特别是字段验证和类型转换方面。
  4. 如何实现GraphQL的订阅(Subscription)功能?NestJS的文档很少提到这部分内容。
  5. 在生产环境中,有没有性能优化的建议?比如缓存策略或者查询复杂度分析。
    希望能得到有实际项目经验的前辈指点,谢谢!

3 回复

构建基于NestJS和TypeGraphQL的GraphQL API是一个很好的选择,以下是一个简单的教程:

  1. 初始化项目:首先通过npm init -y创建项目并安装依赖,包括NestJS核心、TypeORM、GraphQL相关的包等。

    npm install [@nestjs](/user/nestjs)/graphql graphql-tools type-graphql typeorm reflect-metadata
    
  2. 配置TypeGraphQL:在app.module.ts中配置TypeGraphQL模块。添加@UseFilters()以支持错误处理,并设置buildSchemaSync()

  3. 创建实体与服务:使用TypeORM定义数据模型(如User),并通过TypeGraphQL装饰器(如@ObjectType, @Field)映射到GraphQL类型。

  4. 定义Resolver:为每个查询和变异创建对应的Resolver函数。例如,定义@Query()来获取所有用户或单个用户信息。

  5. 启动应用:确保数据库连接正常后运行npm run start:dev启动开发服务器。

  6. 测试API:可以使用GraphiQL界面测试你的GraphQL API是否按预期工作。

这个流程帮助你快速搭建起一个功能完整的GraphQL服务端,适合中小型应用的数据交互需求。记得合理规划数据结构和权限管理,保障系统的安全性和扩展性。


好的,以下是一个简单的NestJS + TypeGraphQL 教程:

  1. 初始化项目:

    npm install -g [@nestjs](/user/nestjs)/cli
    nest new graphql-nest
    cd graphql-nest
    
  2. 安装依赖:

    npm install type-graphql graphql apollo-server-express reflect-metadata
    npm install --save-dev [@types](/user/types)/graphql
    
  3. 配置TypeGraphQL: 在 main.ts 中添加:

    import 'reflect-metadata';
    import { buildSchema } from 'type-graphql';
    import { HelloResolver } from './resolvers/hello.resolver';
    
    async function bootstrap() {
      const schema = await buildSchema({
        resolvers: [HelloResolver],
      });
      // 启动Apollo Server...
    }
    
  4. 创建Resolver: 在 src/resolvers/ 下创建 hello.resolver.ts:

    import { Resolver, Query } from 'type-graphql';
    
    [@Resolver](/user/Resolver)()
    export class HelloResolver {
      @Query(() => String)
      hello(): string {
        return 'Hello World!';
      }
    }
    
  5. 启动服务: 修改 main.ts 启动 Apollo Server。

完成以上步骤后,你可以通过 GraphQL Playground 访问 http://localhost:3000/graphql,执行查询 query { hello },返回结果为 "Hello World!"

使用NestJS和TypeGraphQL构建GraphQL API教程

基础设置

  1. 首先安装必要依赖:
npm install @nestjs/graphql graphql type-graphql apollo-server-express
  1. 创建基本模块:
// app.module.ts
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: true,
    }),
  ],
})
export class AppModule {}

创建Resolver

// example.resolver.ts
import { Query, Resolver } from 'type-graphql';

@Resolver()
export class ExampleResolver {
  @Query(() => String)
  hello() {
    return 'Hello World!';
  }
}

创建Object Type

// example.type.ts
import { ObjectType, Field } from 'type-graphql';

@ObjectType()
export class Example {
  @Field()
  id: number;

  @Field()
  name: string;
}

完整API示例

// user.resolver.ts
import { Query, Resolver, Mutation, Arg } from 'type-graphql';
import { User } from './user.type';

@Resolver(() => User)
export class UserResolver {
  private users: User[] = [];

  @Query(() => [User])
  async users() {
    return this.users;
  }

  @Mutation(() => User)
  async createUser(
    @Arg('name') name: string,
    @Arg('email') email: string
  ) {
    const user = { id: this.users.length + 1, name, email };
    this.users.push(user);
    return user;
  }
}

运行和测试

启动服务后,访问http://localhost:3000/graphql进入GraphQL Playground进行测试。

可以执行以下查询:

query {
  users {
    id
    name
  }
}

或执行突变:

mutation {
  createUser(name: "John", email: "john@example.com") {
    id
    name
    email
  }
}
回到顶部