Я пытаюсь создать динамический GraphQLObjectType с помощью graphQl, примерно так:
export const Project = (data) => {
return new GraphQLObjectType({
name: 'Project',
fields: () => ({
id: {
type: GraphQLString
},
type: {
type: GraphQLString
},
author: {
type: User,
resolve: (root, args, req) => {
...
}
}
})
})
};
Я называю эту модель в своем запросе следующим образом:
getProjectById: {
type: Project(structure),
args: {
id: { type: GraphQLString }
},
resolve(source, args, req) {
const projectService = new ProjectService(req);
return projectService.getProjectById(args.id)
}
}
проблема в том, что при этом я получаю эту ошибку:
Schema must contain unique named types but contains multiple types named "Project"
где ошибка? у тебя есть совет? огромное спасибо


Вызов Project(structure), в свою очередь, вызывает new GraphQLObjectType({name: 'Project',...}). Если вы вызываете Project(structure) более одного раза, вы пытаетесь объявить несколько GraphQLObjectTypes с одним и тем же именем (что не имеет смысла).
Если вы создадите / объявите GraphQLObjectType динамически, вы должны сгенерировать уникальное свойство имени. Например. нравится:
// assuming data.name is unique
export const Project = (data) => {
return new GraphQLObjectType({
name: `Project${data.name}`,
...
})
}
да, это было что-то вроде этого .... так как мне нужно то же имя, я запускаю экземпляр вместо того, чтобы запускать функцию каждый раз ... спасибо!
edit: я возвращаю ошибку, когда пытаюсь сделать то же самое с мутацией, я думаю, потому что я снова запускаю функцию для мутации ... но это не должно быть проблемой, потому что с функцией для мутации или без нее я должен вызвать в другой раз файл и это должно создать новый экземпляр .... Я что-то не так делаю?
Попробуйте вернуть Project как объект, а не функцию, потому что для каждого вызова вы создаете новый экземпляр, но он должен быть создан только один раз. Если вы хотите передать какие-либо данные, используйте аргументы преобразователей.