无法从模式拼接中的另一个 schema.graphql 文件中的其他 schema.graphql 文件访问共享模式
Posted
技术标签:
【中文标题】无法从模式拼接中的另一个 schema.graphql 文件中的其他 schema.graphql 文件访问共享模式【英文标题】:Cannot access shared schema from other schema.graphql file in another schema.graphql file in schema stiching 【发布时间】: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])
);
【问题讨论】:
【参考方案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 不存在。所以它不起作用。以上是关于无法从模式拼接中的另一个 schema.graphql 文件中的其他 schema.graphql 文件访问共享模式的主要内容,如果未能解决你的问题,请参考以下文章
无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图
无法将固定大小的字节数组从结构复制到 C# 结构中的另一个数组