错误:只能有一个名为“fragmentName”的片段
Posted
技术标签:
【中文标题】错误:只能有一个名为“fragmentName”的片段【英文标题】:Error: There can be only one fragment named "fragmentName" 【发布时间】:2018-12-19 21:51:10 【问题描述】:我正在更改我的架构格式:
var OldSchema = new GraphQLSchema(
query: queryType,
mutation: mutationType
);
到这里:
typeDef = `
type Query
posts: [Post]
author: Author
`;
const NewSchema = makeExecutableSchema(
typeDefs: [typeDef],
resolvers: resolvers
);
由于我有很多字段,我想将它们从旧格式一个一个转移到新格式,我正在使用graphql-tools的mergeSchemas功能:
export const RootSchema = mergeSchemas(
schemas: [NewSchema, OldSchema]
);
当我尝试创建一个查询(仅从 OldSchema 获取字段)时,我收到错误消息**只能有一个名为“duty”的片段。
这是我的查询的样子:
query
person
...personFragment
fragment conceptFragment on Person
jobs
... on techJob
...activities
... on carpentryJob
...skillSet
fragment activities on techJob
duties
...duty
fragment duty on Duties
id
fragment skillSet on carpentryJob
skills
...dutiesSkill
fragment dutiesSkill on Skill
duties
...duty
我知道解析中发生了错误,并且似乎正在对 OldSchema 和 RootSchema 进行查询验证,但 RootSchema 是失败的。
【问题讨论】:
难道……职责就应该是职责? 不,那是指Duties上的碎片碎片税。问题在于 OldSchema 和 RootSchema 的验证正在发生。但是,每当它对 OldSchema 进行验证时,它就会搞砸,并将所有 ... 视为片段定义,而不是内联片段。 使用大写的类型名称和片段名称可能会更清楚,这样您就不会将它们与字段混淆。 我很想看看查询被模式合并重写以从“OldSchema”获取数据后的样子。 【参考方案1】:您可以给其中一个片段一个alias
吗?喜欢:
fragment activities on techJob
activities: duties
...duty
和
fragment dutiesSkill on Skill
dutiesSkill: duties
...duty
【讨论】:
这不是问题,问题在于将...职责计算为定义两次【参考方案2】:此问题已通过更新到 v14.0.0-rc.2 版本得到解决。没有提及正在解决的问题。
【讨论】:
以上是关于错误:只能有一个名为“fragmentName”的片段的主要内容,如果未能解决你的问题,请参考以下文章
Apollo Server - GraphQL 错误:只能有一种名为“查询”的类型
为啥 Apollo 无法在 Xcode 中构建 - 只能有一个名为 ...的片段?