【问题标题】:How can I troubleshoot an error: lib/graphql has no exported mutation - for a mutation I have defined and which appears in graphql.tsx我如何解决错误:lib/graphql 没有导出的突变 - 对于我定义的突变,它出现在 graphql.tsx 中
【发布时间】:2022-11-26 14:10:56
【问题描述】:

我试图弄清楚我需要做什么才能让 lib/graphql 识别我所做的突变。

我有一个 issue.tsx(这是一个表格)。它导入:

import {
  IssueInput,
  useUpdateIssueMutation,
  useAllIssuesQuery,
  useCreateIssueMutation,
  useDeleteIssueMutation,
  Issue as IssueGQLType,
} from "lib/graphql" 

除了 IssueInput 和 Issue,我的终端出现错误,提示这些查询和变更不是导出成员。

但是,当我尝试在本地主机中加载问题页面时,我收到一条错误消息:

错误 - GraphQLError [Object]:语法错误:预期名称,已找到 .它指向导入 Issue 的行。

我在解析器中进行了所有这些查询和更改,如下所示:

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"
import { UseAuth } from "../shared/middleware/UseAuth"
import { Role } from "@generated"

@Service()
@Resolver(() => Issue)
export default class IssueResolver {
  @Inject(() => IssueService)
  issueService: IssueService

  @Query(() => [Issue])
  async allIssues() {
    return await this.issueService.getAllIssues()
  }

  @Query(() => [Issue])
  async futureRiskIssues() {
    return await this.issueService.getFutureRiskIssues()
  }

  @Query(() => Issue)
  async issue(@Arg("id") id: string) {
    return await this.issueService.getIssue(id)
  }

  @UseAuth([Role.ADMIN])
  @Mutation(() => Issue)
  async createIssue(@Arg("data") data: IssueInput) {
    return await this.issueService.createIssue(data)
  }

  @UseAuth([Role.ADMIN])
  @Mutation(() => Issue)
  async deleteIssue(@Arg("id") id: string) {
    return await this.issueService.deleteIssue(id)
  }
  @UseAuth([Role.ADMIN])
  @Mutation(() => Issue)
  async updateIssue(@Arg("id") id: string, @Arg("data") data: IssueInput) {
    return await this.issueService.updateIssue(id, data)
  }
}

我还可以从我的 graphql.tsx 文件中看到,这些函数被识别如下:

export type Mutation = {
  __typename?: 'Mutation';
  createIssue: Issue;
  createUser: User;
  deleteIssue: Issue;
  destroyAccount: Scalars['Boolean'];
  forgotPassword: Scalars['Boolean'];
  getBulkSignedS3UrlForPut?: Maybe<Array<SignedResponse>>;
  getSignedS3UrlForPut?: Maybe<SignedResponse>;
  login: AuthResponse;
  register: AuthResponse;
  resetPassword: Scalars['Boolean'];
  updateIssue: Issue;
  updateMe: User;
};

export type MutationCreateUserArgs = {
  data: UserCreateInput;
};


export type MutationDeleteIssueArgs = {
  id: Scalars['String'];
};

export type MutationUpdateIssueArgs = {
  data: IssueInput;
  id: Scalars['String'];
};

我已经多次运行代码生成器,想不出任何其他方法来强制识别这些突变和查询。任何人都可以找到解决此问题的方法吗?

我的 codegen.yml 有:

schema: http://localhost:5555/graphql
documents:
  - "src/components/**/*.{ts,tsx}"
  - "src/lib/**/*.{ts,tsx}"
  - "src/pages/**/*.{ts,tsx}"
overwrite: true
generates:
  src/lib/graphql.tsx:
    config:
      withMutationFn: false
      addDocBlocks: false
      scalars:
        DateTime: string
    plugins:
      - add:
          content: "/* eslint-disable */"
      - typescript
      - typescript-operations
      - typescript-react-apollo

【问题讨论】:

  • 您使用哪种工具来创建 graphql.tsx 文件?似乎生成了,也许是 GraphQL Codegen?
  • 是的 - graphql 的代码生成器
  • 正如响应所指出的,您似乎没有安装和运行生成挂钩所需的所有插件。您的输出看起来只是在运行“打字稿”插件。检查评论或文档并确保您已正确设置它们。

标签: graphql


【解决方案1】:

检查你的 codegen.yml

overwrite: true
schema: "http://localhost:4000/graphql"
documents: "src/graphql/**/*.graphql"
generates:
  src/generated/graphql.tsx:
    plugins:
      - "typescript"
      - "typescript-operations"
      - "typescript-react-apollo"
  ./graphql.schema.json:
    plugins:
      - "introspection"

或者试试@Resolver(Issue)

【讨论】:

  • 我在哪里写@Resolver(Issue)?
猜你喜欢
  • 2018-12-03
  • 2019-12-21
  • 1970-01-01
  • 2016-08-15
  • 2021-09-23
  • 2019-09-29
  • 2020-11-02
  • 2017-10-25
  • 2018-07-02
相关资源
最近更新 更多