Невозможно получить доступ к общей схеме из другого файла schema.graphql в другом файле schema.graphql при сшивании схемы - PullRequest
1 голос
/ 16 апреля 2019

У меня есть пользовательская схема в файле userSchema.graphql;

  id: String!
  userName: String!
  email: String!
  password: String!
}

, и у меня есть другой файл schema.graphql для входа и регистрации

, и я не могу получить доступ к пользовательской схеме при входе в систему/ зарегистрировать схему

type Query{
    hi: String!
}
type Mutation {
    register( userName: String!, email: String!, password: String! ): User
}

Я использую схему схемы из инструментов graphql и объединяю typeDefs и resolver из пакета merge-graphql-schema

import "graphql-import-node";
import { GraphQLSchema } from "graphql";
import { mergeResolvers, mergeTypes } from "merge-graphql-schemas";
import * as userSchema from './modules/auth/shared/schema.graphql'
import * as registerTypedefs from "./modules/auth/register/schema.graphql";
import registerResolver from "./modules/auth/register/registerResolver";

import * as todoTypedefs from "./modules/todo/schema.graphql";
import todoResolver from "./modules/todo/todoResolver";

import { makeExecutableSchema } from "graphql-tools";

const schema: GraphQLSchema = makeExecutableSchema({
  typeDefs: mergeTypes([userSchema, registerTypedefs, todoTypedefs], { all: true }),
  resolvers: mergeResolvers([registerResolver, todoResolver])
});
export default schema;

Я получаю ошибку

Error: Field register: Couldn't find type User in any of the schemas.
    at collectNode (E:\graphql\express-apollo-server\node_modules\graphql-import\src\definition.ts:154:15)
    at E:\graphql\express-apollo-server\node_modules\graphql-import\src\definition.ts:135:7
    at Array.forEach (<anonymous>)

РЕДАКТИРОВАТЬ Я использовал fileLoader из 'merge-graphql-schemas', и он отлично работал

import { mergeResolvers, mergeTypes, fileLoader } from "merge-graphql-schemas";


const typesArray = fileLoader(path.join(__dirname, './modules/**/*.graphql'), { recursive: true })
const schema: GraphQLSchema = makeExecutableSchema({
  typeDefs: mergeTypes(typesArray, { all: true }),
  resolvers: mergeResolvers([registerResolver, loginRegister, todoResolver, storyResolver])
});

1 Ответ

1 голос
/ 16 апреля 2019

Я использовал файл require-graphql вместе со слиянием lodash в моем проекте, и тот же сценарий работает для меня.

import requireGraphQLFile from 'require-graphql-file';
import { merge } from 'lodash';

const $userSchema = requireGraphQLFile('./schema/yourFolder/userSchema.graphql');
const $registerTypedefs= requireGraphQLFile('./schema/yourFolder/register.graphql');

import registerResolver from "./modules/auth/register/registerResolver";
import todoResolver from "./modules/todo/todoResolver";

const schema: GraphQLSchema = makeExecutableSchema({
   typeDefs: [$userSchema, 
              $registerTypedefs,
              todoTypedefs
             ],              
   resolvers: merge(registerResolver, todoResolver)
});

Надеюсь, это поможет.

...