【问题标题】:Cannot access shared schema from other schema.graphql file in another schema.graphql file in schema stiching无法从模式拼接中的另一个 schema.graphql 文件中的其他 schema.graphql 文件访问共享模式
【发布时间】:2019-09-06 17:06:45
【问题描述】:

我在 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 工具的模式拼接 并从 merge-graphql-schema 包中合并 typeDefs 和解析器

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>)

编辑 我使用了“merge-graphql-schemas”中的 fileLoader 而且效果很好

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])
});

【问题讨论】:

    标签: typescript graphql apollo-server graphql-tools


    【解决方案1】:

    我在我的项目中使用了一个 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)
    });
    

    希望这会有所帮助。

    【讨论】:

    • 我正在使用打字稿,但它的@types 不存在。所以它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 2023-03-18
    • 2019-11-06
    • 2019-06-28
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多