为了让lib/graphql能够识别我所做的突变,我正在试图弄清楚我需要做些什么。
我有一个issue.tsx (这是一个表单)。它进口:
import {
IssueInput,
useUpdateIssueMutation,
useAllIssuesQuery,
useCreateIssueMutation,
useDeleteIssueMutation,
Issue as IssueGQLType,
} from "lib/graphql" 除了IssueInput和queries之外,我在我的终端中发现了错误,这些查询和突变不是导出的成员。
但是,当我试图在本地主机中加载问题页时,会得到一个错误,即:
错误- GraphQLError对象:语法错误:预期名称,找到。它指向导入问题的行。
我在解析器中进行了以下所有这些查询和突变:
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当我查看身份验证对象(在我试图使用的样板应用程序中提供的)上可用的突变时,我可以看到在lib/graphql文件中有不同的表示方式的突变和查询。我只是想不出如何用这种方式来强迫我写的那些内容被包括在内:
export function useLoginMutation(baseOptions?: Apollo.MutationHookOptions<LoginMutation, LoginMutationVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useMutation<LoginMutation, LoginMutationVariables>(LoginDocument, options);
}相反,我得到了所有这些东西,但是没有一个看起来像上面的那样,我不知道要将哪一个导入到我的前端表单,这样我就可以在数据库中输入一个条目。它们都不像我在解析器中定义的查询或突变。
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文件中确实有这样的记录:
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 }]
对于查询也是一样的
发布于 2022-11-22 12:19:18
检查您的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)这样的东西
发布于 2022-12-02 16:07:45
您似乎没有生成要导入的钩子。
您可以更新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
withHooks: true # <--------------------- this line
plugins:
- add:
content: "/* eslint-disable */"
- typescript
- typescript-operations
- typescript-react-apollo发布于 2022-12-02 18:08:07
如果收到在GraphQL模式中定义的突变的错误"lib/graphql没有导出突变“,有几个可能的原因:
模式中没有正确定义突变。确保突变是使用突变关键字定义的,并且它的名称和格式是正确的。您的代码中没有正确导入该突变。确保您正在使用正确的语法导入突变,并确保它是从正确的文件导入的。没有将突变添加到lib/graphql.ts文件中的导出对象中。此文件定义代码可用的突变、查询和订阅列表。确保将突变添加到此文件中的导出对象中。代码中有一个类型错误。如果使用错误的参数类型调用突变,则有时会发生此错误。确保传递给突变的参数是正确的类型,并且它们与模式定义相匹配。要排除此错误,可以尝试以下步骤:
再次检查突变的架构定义,并确保它是正确定义和格式化的。在代码中检查导入语句中的突变,并确保它是正确的,并且是从正确的文件导入的。检查lib/graphql.ts文件,并确保将突变添加到导出对象中。检查代码中的类型错误,并确保传递给突变的参数类型正确,并与模式定义匹配。如果仍然无法解决错误,可以尝试通过使用较小的代码库创建错误的最小再现来隔离问题。这可以帮助您识别错误的原因,并更容易找到解决方案。
https://stackoverflow.com/questions/74438362
复制相似问题