GraphQL циклическая ссылка NodeJS - PullRequest
0 голосов
/ 15 февраля 2020

Я использую модуль GraphQL types для создания моей схемы GraphQL путем зацикливания множества JSON схем. Кажется, я застрял в проблеме, когда речь заходит о ссылках на другие типы. Как я могу создать тип из JSON схемы и ссылаться на себя или на другие типы перед их созданием?

Все мои типы могут быть ссылками на пути. Файл в пути отвечает за динамическое создание схемы для типа:

import { JSONSchema } from "./index"
import { createGraphQLType } from "../../graphql";

export default createGraphQLType(JSONSchema, "Query")

Функция createGraphQLType довольно проста, она просто берет типы в JSONSchema и переключает ее на тип GraphQL с помощью используя propertiesToFields().

export default (schema: JSONSchema4, resolverType: string) => {

  const resolvers = propertiesToFields(schema.properties, resolverType);

  return new GraphQLObjectType({
    name: schema.title,
    description: schema.description,
    fields: () => ({...resolvers})
  });
};

Однако, когда он сталкивается со ссылкой на другой тип, он возвращает обещание пути к типу GraphQL. Проблема в том, что это возвращает обещание.

const dir = process.env.PWD + "/dist/models";

export default function(name: string): Promise<GraphQLType> {
  try {
    return import(dir + "/" + name);
  } catch (err) {
    throw err;
  }
};

enter image description here

Это в свою очередь выдает ошибку, когда я пытаюсь запустить схему:

(узел: 74096) UnhandledPromiseRejectionWarning: Ошибка: схема должна содержать уникально именованные типы, но содержит несколько типов с именем "undefined". в typeMapReducer (/Users/vemundeldegard/salire/data-api/node_modules/graphql/type/schema.js:262:13) в typeMapReducer (/ Users / vemundeldegard / salire / data-api / node_modules / graphql / type / схема. js: 286: 20) в typeMapReducer (/Users/vemundeldegard/salire/data-api/node_modules/graphql/type/schema.js:286:20) в Array.reduce () в новой GraphQLSchema ( /Users/vemundeldegard/salire/data-api/node_modules/graphql/type/schema.js:145:28) в /Users/vemundeldegard/salire/data-api/dist/graphql/index.js:34 : 18 в Generator.next () в выполненном (/Users/vemundeldegard/salire/data-api/dist/graphql/index.js:5:58)

...