Nodejs Nestjs GraphQL工具插件@nestjs/graphql-tools的使用

Nodejs Nestjs GraphQL工具插件@nestjs/graphql-tools的使用
[@nestjs](/user/nestjs)/graphql-tools 并不是一个实际存在的包。在 NestJS 中,我们通常使用 [@nestjs](/user/nestjs)/graphql 来集成 GraphQL,并且可能会用到 graphql-tools 这个库来帮助构建 GraphQL schema 和 resolvers。下面我将介绍如何在 NestJS 项目中使用 [@nestjs](/user/nestjs)/graphql 来创建一个简单的 GraphQL API。

首先,确保你的 Node.js 环境已经安装了 NestJS CLI。如果没有,可以通过以下命令安装:

npm i -g [@nestjs](/user/nestjs)/cli

接下来,你可以通过 NestJS CLI 创建一个新的 NestJS 项目:

nest new project-name
cd project-name

然后,添加 GraphQL 支持:

nest g module graphql

接下来,安装必要的依赖:

npm install [@nestjs](/user/nestjs)/graphql apollo-server-express graphql

现在,让我们在 app.module.ts 中配置 GraphQL 模块:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { GraphQLModule } from '[@nestjs](/user/nestjs)/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: 'schema.gql',
    }),
  ],
})
export class AppModule {}

这里我们配置了 GraphQLModule 使用自动模式生成 GraphQL schema 文件(schema.gql)。

接下来,创建一个简单的 GraphQL 模型和对应的 resolver:

  1. src 目录下创建一个名为 dogs 的文件夹。
  2. dogs 文件夹中创建两个文件:dogs.resolver.tsdogs.service.ts

dogs.service.ts 内容如下:

import { Injectable } from '[@nestjs](/user/nestjs)/common';

@Injectable()
export class DogsService {
  private readonly dogs = [
    { name: 'Buddy', breed: 'Golden Retriever' },
    { name: 'Max', breed: 'German Shepherd' },
  ];

  findAll() {
    return this.dogs;
  }
}

dogs.resolver.ts 内容如下:

import { Resolver, Query } from '[@nestjs](/user/nestjs)/graphql';
import { DogsService } from './dogs.service';

@Resolver('Dog')
export class DogsResolver {
  constructor(private readonly dogsService: DogsService) {}

  @Query(() => [Dogs])
  async dogs() {
    return this.dogsService.findAll();
  }
}

最后,在 app.module.ts 中引入这个 resolver:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { GraphQLModule } from '[@nestjs](/user/nestjs)/graphql';
import { DogsResolver } from './dogs/dogs.resolver';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: 'schema.gql',
    }),
  ],
  providers: [DogsResolver],
})
export class AppModule {}

现在,当你启动应用时,你应该能够访问 GraphQL 接口,并查询 dogs 数据。

以上就是使用 NestJS 集成 GraphQL 的基本步骤。如果你需要更复杂的 GraphQL 功能或自定义 schema,可以参考官方文档进行进一步配置。


3 回复

当然!@nestjs/graphql-tools 是 NestJS 中一个非常强大的工具包,它提供了许多用于构建 GraphQL API 的实用功能。不过,通常我们直接使用 @nestjs/graphql 来搭建 GraphQL 服务,而 @nestjs/graphql-tools 则是 @nestjs/graphql 内部依赖的一些工具。

如果你想要自定义 GraphQL 解析逻辑或增强 GraphQL 功能,可以考虑直接使用 graphql-tools(独立于 NestJS 的库)。但如果你是在 NestJS 项目中工作,更推荐直接利用 @nestjs/graphql 提供的功能。

例如,你可以定义一个模块来设置 GraphQL 服务器:

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: true,
    }),
  ],
})
export class AppModule {}

这样,你就有了一个基本的 GraphQL 服务器,可以开始定义你的类型和解析器了!

希望这对你有帮助!如果需要更具体的例子,随时告诉我!


@nestjs/graphql-tools 是一个用于增强 NestJS GraphQL 功能的库,它提供了额外的功能和工具来简化 GraphQL 的开发。然而,直接使用 @nestjs/graphql-tools 并不是一个常见的做法,因为 NestJS 已经为 GraphQL 提供了非常强大的支持。通常情况下,我们通过配置 NestJS 的 GraphQL 模块来实现所需的功能。

但是,如果你确实需要使用 @nestjs/graphql-tools 或者想要深入了解如何与 GraphQL 工具集成,下面是一个简单的示例,展示如何设置一个基本的 NestJS 项目,并添加 GraphQL 支持。

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

npm install @nestjs/graphql graphql apollo-server-express

然后创建一个简单的 NestJS 应用程序,并添加 GraphQL 支持:

  1. 创建一个新的 NestJS 项目
npm i -g @nestjs/cli
nest new my-graphql-app
cd my-graphql-app
  1. 安装 GraphQL 相关依赖

如上所述,这些依赖已经安装过了。

  1. 生成模块、服务和控制器
nest g module app
nest g service app
nest g controller app
  1. 编辑 AppModule

打开 src/app.module.ts 文件,添加 GraphQL 模块配置:

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: 'schema.gql',
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  1. 创建一个简单的 GraphQL Schema

在项目的根目录下创建一个 schema.gql 文件,内容如下:

type Query {
  hello: String
}
  1. 创建一个 GraphQL Resolver

编辑 src/app.resolver.ts 文件,内容如下:

import { Resolver, Query } from '@nestjs/graphql';

@Resolver()
export class AppResolver {
  @Query(() => String)
  hello(): string {
    return 'Hello World!';
  }
}
  1. 启动应用

最后,运行你的 NestJS 应用程序:

npm run start

现在,你可以通过访问 GraphQL 端点(默认是 /graphql)来测试你的 API。

关于 @nestjs/graphql-tools 的具体使用,你可以参考其文档或源码,但通常情况下,上述步骤应该足以满足大多数 GraphQL 需求。如果你有更复杂的需求,例如自定义解析器或数据加载器,那么你可能需要深入研究 @nestjs/graphql-tools

@nestjs/graphql-tools 并不是一个独立的包,而是 @nestjs/graphql 包的一部分,用于支持 GraphQL 功能。要在 NestJS 项目中使用 GraphQL,首先安装 @nestjs/graphqlgraphql

npm install @nestjs/graphql graphql

然后,在模块中导入 GraphQLModule

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: 'schema.gql',
    }),
  ],
})
export class AppModule {}

这样就配置好了基本的 GraphQL 环境,可以开始定义数据模型和解析器了。

回到顶部