GraphQL报错:模块'lib/graphql'未导出'useAllCCIssuesQuery',如何更新?
问题
报错信息
GraphQL: Module '"lib/graphql"' has no exported member 'useAllCCIssuesQuery'
问题描述
我正在学习使用GraphQL,已在service和对应的resolver中创建了查询,后端执行prisma generate无报错,但不知道如何更新lib/graphql模块以包含自定义查询。
相关代码
service.ts
import { prisma } from "../../lib/prisma" import { Service } from "typedi" import { IssueInput } from "./inputs/create.input" import { Resolver } from "type-graphql" import { Issue } from "./issue.model" @Service() @Resolver(() => Issue) export class IssueService { async createIssue(data: IssueInput) { return await prisma.issue.create({ data }) } async getAllIssues() { return await prisma.issue.findMany() } async getAllClimateChangeIssues() { return await prisma.issue.findMany({where: {issueCategory: "CLIMATE_CHANGE"}}) } async getIssue(id: string) { return await prisma.issue.findUnique({ where: { id } }) } }
resolver.ts
import { Arg, Mutation, Query, Resolver } from "type-graphql" import { Issue } from "./issue.model" import { IssueService } from "./issue.service" import { IssueInput } from "./inputs/create.input" import { Inject, Service } from "typedi" @Service() @Resolver(() => Issue) export default class IssueResolver { @Inject(() => IssueService) issueService: IssueService @Query(() => [Issue]) async allIssues() { return await this.issueService.getAllIssues() } @Query(() => [Issue]) async allClimateChangeIssues() { return await this.issueService.getAllClimateChangeIssues() } @Query(() => Issue) async issue(@Arg("id") id: string) { return await this.issueService.getIssue(id) } @Mutation(() => Issue) async createIssue(@Arg("data") data: IssueInput) { return await this.issueService.createIssue(data) } }
解决方案
lib/graphql中的查询钩子是根据后端GraphQL Schema自动生成的,和prisma generate无关,你需要执行以下步骤更新该模块:
- 启动后端GraphQL服务:确保后端服务处于运行状态,这样代码生成工具能获取到最新的Schema。
- 重新生成客户端GraphQL代码:你应该用到了
@graphql-codegen/cli这类工具,找到项目中的代码生成配置文件(如codegen.yml或codegen.ts),执行生成命令:
该命令会读取后端最新的Schema,更新npm run generate # 或使用yarn yarn generatelib/graphql下的所有类型和查询钩子,包括你新增的allClimateChangeIssues对应的查询钩子(注意命名可能和Resolver方法名对应,比如useAllClimateChangeIssuesQuery,你报错中的useAllCCIssuesQuery可能是缩写后的命名,需看生成规则)。 - 检查生成配置:如果生成后仍无对应钩子,检查配置文件:
- 是否正确指向后端GraphQL服务的Schema地址(如
http://localhost:4000/graphql) - 输出路径是否设置为
lib/graphql - 是否配置了生成React查询钩子的插件(如
@graphql-codegen/typescript-react-apollo)
- 是否正确指向后端GraphQL服务的Schema地址(如
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

