Динамический GraphQLObjectType

Я пытаюсь создать динамический 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 как объект, а не функцию, потому что для каждого вызова вы создаете новый экземпляр, но он должен быть создан только один раз. Если вы хотите передать какие-либо данные, используйте аргументы преобразователей.

Arek Jablonski 23.10.2018 02:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
1
61
1

Ответы 1

Вызов 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}`, ... }) }

да, это было что-то вроде этого .... так как мне нужно то же имя, я запускаю экземпляр вместо того, чтобы запускать функцию каждый раз ... спасибо!

francesco.venica 23.10.2018 20:00

edit: я возвращаю ошибку, когда пытаюсь сделать то же самое с мутацией, я думаю, потому что я снова запускаю функцию для мутации ... но это не должно быть проблемой, потому что с функцией для мутации или без нее я должен вызвать в другой раз файл и это должно создать новый экземпляр .... Я что-то не так делаю?

francesco.venica 23.10.2018 20:32

Другие вопросы по теме