首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何排除错误: lib/graphql没有导出的突变-对于我定义的并出现在graphql.tsx中的突变

如何排除错误: lib/graphql没有导出的突变-对于我定义的并出现在graphql.tsx中的突变
EN

Stack Overflow用户
提问于 2022-11-14 22:02:03
回答 3查看 72关注 0票数 0

为了让lib/graphql能够识别我所做的突变,我正在试图弄清楚我需要做些什么。

我有一个issue.tsx (这是一个表单)。它进口:

代码语言:javascript
运行
复制
import {
  IssueInput,
  useUpdateIssueMutation,
  useAllIssuesQuery,
  useCreateIssueMutation,
  useDeleteIssueMutation,
  Issue as IssueGQLType,
} from "lib/graphql" 

除了IssueInput和queries之外,我在我的终端中发现了错误,这些查询和突变不是导出的成员。

但是,当我试图在本地主机中加载问题页时,会得到一个错误,即:

错误- GraphQLError对象:语法错误:预期名称,找到。它指向导入问题的行。

我在解析器中进行了以下所有这些查询和突变:

代码语言:javascript
运行
复制
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文件中看到,这些函数被识别为:

代码语言:javascript
运行
复制
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有:

代码语言:javascript
运行
复制
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

当我查看身份验证对象(在我试图使用的样板应用程序中提供的)上可用的突变时,我可以看到在lib/graphql文件中有不同的表示方式的突变和查询。我只是想不出如何用这种方式来强迫我写的那些内容被包括在内:

代码语言:javascript
运行
复制
export function useLoginMutation(baseOptions?: Apollo.MutationHookOptions<LoginMutation, LoginMutationVariables>) {
        const options = {...defaultOptions, ...baseOptions}
        return Apollo.useMutation<LoginMutation, LoginMutationVariables>(LoginDocument, options);
      }

相反,我得到了所有这些东西,但是没有一个看起来像上面的那样,我不知道要将哪一个导入到我的前端表单,这样我就可以在数据库中输入一个条目。它们都不像我在解析器中定义的查询或突变。

代码语言:javascript
运行
复制
export type IssueInput = {
  description: Scalars['String'];
  issueGroup: Scalars['String'];
  title: Scalars['String'];
};

export type IssueListRelationFilter = {
  every?: InputMaybe<IssueWhereInput>;
  none?: InputMaybe<IssueWhereInput>;
  some?: InputMaybe<IssueWhereInput>;
};

export type IssueRelationFilter = {
  is?: InputMaybe<IssueWhereInput>;
  isNot?: InputMaybe<IssueWhereInput>;
};

export type IssueWhereInput = {
  AND?: InputMaybe<Array<IssueWhereInput>>;
  NOT?: InputMaybe<Array<IssueWhereInput>>;
  OR?: InputMaybe<Array<IssueWhereInput>>;
  createdAt?: InputMaybe<DateTimeFilter>;
  description?: InputMaybe<StringFilter>;
  id?: InputMaybe<UuidFilter>;
  issueGroup?: InputMaybe<IssueGroupRelationFilter>;
  issueGroupId?: InputMaybe<UuidFilter>;
  subscribers?: InputMaybe<UserIssueListRelationFilter>;
  title?: InputMaybe<StringFilter>;
  updatedAt?: InputMaybe<DateTimeFilter>;
};

export type IssueWhereUniqueInput = {
  id?: InputMaybe<Scalars['String']>;
};

我的graphql.tsx文件中确实有这样的记录:

代码语言:javascript
运行
复制
export type Mutation = {
  __typename?: 'Mutation';
  createIssue: Issue;
  createIssueGroup: IssueGroup;
  createUser: User;
  deleteIssue: Issue;
  deleteIssueGroup: IssueGroup;
  destroyAccount: Scalars['Boolean'];
  forgotPassword: Scalars['Boolean'];
  getBulkSignedS3UrlForPut?: Maybe<Array<SignedResponse>>;
  getSignedS3UrlForPut?: Maybe<SignedResponse>;
  login: AuthResponse;
  register: AuthResponse;
  resetPassword: Scalars['Boolean'];
  updateIssue: Issue;
  updateIssueGroup: IssueGroup;
  updateMe: User;
};

但我不能说: createIssueMutation是我的issue.tsx中的一个导入,在这里,我试图创建一个表单,以便将其发布到数据库。1:https://github.com/NoQuarterTeam/boilerplate

在发布表单中,我得到了一个错误,即:

“资源”:“/./src/page.tsx”、“所有者”:“类型记录”、“代码”:"2305“、”严重性“:8、”消息“:”模块‘lib/graphql“’没有导出的成员‘useCreateIssueMutation’。”、“源代码”:"ts“、"startLineNumber":7、"startColumn":27、"endLineNumber":7、"endColumn":54 }]

对于查询也是一样的

EN

回答 3

Stack Overflow用户

发布于 2022-11-22 12:19:18

检查您的codegen.yml

代码语言:javascript
运行
复制
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)这样的东西

票数 1
EN

Stack Overflow用户

发布于 2022-12-02 16:07:45

您似乎没有生成要导入的钩子。

您可以更新codegen.yml文件以添加生成的钩子:

代码语言:javascript
运行
复制
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
      withHooks: true # <--------------------- this line
    plugins:
      - add:
          content: "/* eslint-disable */"
      - typescript
      - typescript-operations
      - typescript-react-apollo
票数 0
EN

Stack Overflow用户

发布于 2022-12-02 18:08:07

如果收到在GraphQL模式中定义的突变的错误"lib/graphql没有导出突变“,有几个可能的原因:

模式中没有正确定义突变。确保突变是使用突变关键字定义的,并且它的名称和格式是正确的。您的代码中没有正确导入该突变。确保您正在使用正确的语法导入突变,并确保它是从正确的文件导入的。没有将突变添加到lib/graphql.ts文件中的导出对象中。此文件定义代码可用的突变、查询和订阅列表。确保将突变添加到此文件中的导出对象中。代码中有一个类型错误。如果使用错误的参数类型调用突变,则有时会发生此错误。确保传递给突变的参数是正确的类型,并且它们与模式定义相匹配。要排除此错误,可以尝试以下步骤:

再次检查突变的架构定义,并确保它是正确定义和格式化的。在代码中检查导入语句中的突变,并确保它是正确的,并且是从正确的文件导入的。检查lib/graphql.ts文件,并确保将突变添加到导出对象中。检查代码中的类型错误,并确保传递给突变的参数类型正确,并与模式定义匹配。如果仍然无法解决错误,可以尝试通过使用较小的代码库创建错误的最小再现来隔离问题。这可以帮助您识别错误的原因,并更容易找到解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74438362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档