在GraphQL架构中将泛型对象用作输入类型时出现问题错误:架构必须包含唯一的命名类型
我有一个插件,当用户创建标记时,它会创建一个带有{id:XXX,text:XXX}的对象。我试图让我的apollo graphql服务器接受此对象作为模式中的类型。我已经尝试了很多方法,但对我来说最有意义的是创建一个具有该对象形状的类型并使用它。这似乎适用于原始类型,但不适用于输入更新和新建。我得到一个错误:错误:架构必须包含唯一的命名类型,但包含多个名为CustomQuestionOption的类型 然后组合成在GraphQL架构中将泛型对象用作输入类型时出现问题错误:架构必须包含唯一的命名类型,graphql,apollo-server,Graphql,Apollo Server,我有一个插件,当用户创建标记时,它会创建一个带有{id:XXX,text:XXX}的对象。我试图让我的apollo graphql服务器接受此对象作为模式中的类型。我已经尝试了很多方法,但对我来说最有意义的是创建一个具有该对象形状的类型并使用它。这似乎适用于原始类型,但不适用于输入更新和新建。我得到一个错误:错误:架构必须包含唯一的命名类型,但包含多个名为CustomQuestionOption的类型 然后组合成 const baseSchema = ` schema { query
const baseSchema = `
schema {
query: Query
mutation: Mutation
}
`;
export const schema = makeExecutableSchema({
typeDefs: [baseSchema, eventTypeDefs, sponsorshipItemTypeDefs, customQuestionTypeDefs, userTypeDefs],
resolvers: merge({}, eventResolvers, sponsorshipItemResolvers, customQuestionResolvers, userResolvers)
});
有没有办法让我的服务器在输入中接受这个对象,或者我必须保存为字符串并在保存和加载时转换它?i、 e.{id:'S',text:'S'}]我想我试图创建的是一个自定义标量,而不是像string、int等内置标量。我只需要将customQuestionOption更改为标量。编辑-见下文 除了无法查询对象的各个属性外,此操作效果良好。真正的解决方案是将CustomQuestionOption返回到查询中使用的类型,并创建另一个输入,我称之为InputCustomQuestionOption,并将其用于最终输入:
const customQuestionTypeDefs = `
type CustomQuestionOption {
id: String,
text: String
}
input InputCustomQuestionOption {
id: String,
text: String
}
type CustomQuestion {
id: ID!
question: String
questionType: String
options: [CustomQuestionOption]
required: Boolean
}
input UpdatedCustomQuestion {
id: ID!
question: String
questionType: String
options: [InputCustomQuestionOption]
required: Boolean
}
input NewCustomQuestion {
question: String
questionType: String
options: [InputCustomQuestionOption]
required: Boolean
}
可能重复的
const customQuestionTypeDefs = `
scalar CustomQuestionOption {
id: String,
text: String
}
type CustomQuestion {
id: ID!
question: String
questionType: String
options: [CustomQuestionOption]
required: Boolean
}
input UpdatedCustomQuestion {
id: ID!
question: String
questionType: String
options: [CustomQuestionOption]
required: Boolean
}
input NewCustomQuestion {
question: String
questionType: String
options: [CustomQuestionOption]
required: Boolean
}
extend type Query {
CustomQuestion(id: ID!): CustomQuestion!
allCustomQuestions: [CustomQuestion]!
}
extend type Mutation {
newCustomQuestion(input: NewCustomQuestion!): CustomQuestion!
updateCustomQuestion(input: UpdatedCustomQuestion!): CustomQuestion!
}
`;
export default customQuestionTypeDefs;
const customQuestionTypeDefs = `
type CustomQuestionOption {
id: String,
text: String
}
input InputCustomQuestionOption {
id: String,
text: String
}
type CustomQuestion {
id: ID!
question: String
questionType: String
options: [CustomQuestionOption]
required: Boolean
}
input UpdatedCustomQuestion {
id: ID!
question: String
questionType: String
options: [InputCustomQuestionOption]
required: Boolean
}
input NewCustomQuestion {
question: String
questionType: String
options: [InputCustomQuestionOption]
required: Boolean
}