Javascript 如何在GraphQL中将GraphQL模式分解为多个文件

Javascript 如何在GraphQL中将GraphQL模式分解为多个文件,javascript,graphql,Javascript,Graphql,我是GraphQL新手。我正在尝试将schema.sql文件拆分为多个文件 第一个问题,这是使用GraphQL(例如,Query.GraphQL、Mutation.GraphQL、TypeA.GraphQL等)进行操作的标准方法吗 其次,我认为typeDefs(用于graphql-yoga)中的参数允许我为所有模式文件传递一个位置数组,但它对我不起作用(请参见下面的错误代码) 以下是我的主index.js文件中的代码: import { graphQLServer, GraphQLServer

我是GraphQL新手。我正在尝试将schema.sql文件拆分为多个文件

第一个问题,这是使用GraphQL(例如,Query.GraphQL、Mutation.GraphQL、TypeA.GraphQL等)进行操作的标准方法吗

其次,我认为typeDefs(用于graphql-yoga)中的参数允许我为所有模式文件传递一个位置数组,但它对我不起作用(请参见下面的错误代码)

以下是我的主index.js文件中的代码:

import { graphQLServer, GraphQLServer } from 'graphql-yoga';
import db from '../database/db';
import Query from './resolvers/Query';
import Mutation from './resolvers/Mutation';
import Post from './resolvers/Post';
import User from './resolvers/User';
import Comment from './resolvers/Comment';
const typeDefs = [
     './schemas/query.graphql', 
     './schemas/mutation.graphql',
     './schemas/user.graphql'
];

const server = new GraphQLServer({
    typeDefs: typeDefs,
    context: { db },
    resolvers: { Query, Mutation, Post, User, Comment }
});

server.start(()=> {
    console.log("Server started on localhost:4000!");
});
下面是我得到的错误:

Error: Field createUser: Couldn't find type User in any of the schemas.
    at collectNode (C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-import\src\definition.ts:154:15)    
    at C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-import\src\definition.ts:135:7
    at Array.forEach (<anonymous>)
    at collectNewTypeDefinitions (C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-import\src\definition.ts:134:26)
    at Object.completeDefinitionPool (C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-import\src\definition.ts:49:39)
    at Object.importSchema (C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-import\src\index.ts:127:18) 
    at mergeTypeDefs (C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-yoga\src\index.ts:456:14)
    at C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-yoga\src\index.ts:472:32
    at Array.reduce (<anonymous>)
    at mergeTypeDefs (C:\Websites\Learning-GraphQL - Local Copy\graphql-bootcamp\graphql-basics\node_modules\graphql-yoga\src\index.ts:471:21)
错误:字段createUser:在任何架构中都找不到类型User。
在collectNode(C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL import\src\definition.ts:154:15)
在C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL import\src\definition.ts:135:7
在Array.forEach()处
在collectNewTypeDefinitions(C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL import\src\definition.ts:134:26)
在Object.completeDefinitionPool(C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL import\src\definition.ts:49:39)
在Object.importSchema(C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL import\src\index.ts:127:18)
在mergeTypeDefs(C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL yoga\src\index.ts:456:14)
在C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL yoga\src\index.ts:472:32
在Array.reduce()处
在mergeTypeDefs(C:\Websites\Learning GraphQL-Local Copy\GraphQL bootcamp\GraphQL basics\node\u modules\GraphQL yoga\src\index.ts:471:21)
正如您所看到的,它说它找不到我的类型(User),但我在User.graphql架构文件中有它。当我在一个文件中拥有所有内容,并且仅以typeDefs的形式传递该文件时,它工作正常。提前感谢您的帮助

const typeDefs = [  
  './schemas/query.graphql',   
  './schemas/mutation.graphql',  
  './schemas/user.graphql'  
];
这只是一个字符串数组

从文档:

typeDefs-字符串、函数、文档、节点或数组

您可以制作如下内容:

import Query from './schemas/query.graphql'
import Mutation from './schemas/mutation.graphql'
import User from './schemas/user.graphql'

const typeDefs = [Query, Mutation, User];

需要配置:

说某些东西不起作用并没有特别大的帮助——如果你看到错误,你应该编辑你的问题以包含完整的错误消息。传入一个路径数组应该可以,但你可能需要绝对文件路径,而不是相对文件路径,因为你的代码已经编译过了。很抱歉。我是S的新手tack Overflow。我添加了更多细节。我尝试了绝对路径,但仍然失败,出现了上面列出的错误。不幸的是,这不起作用。我从文件中得到了解析错误。我想这是因为它认为这是一个JS文件?试试这个方法:第一个方法是从原始.graphql文件导入的-
rootSchemaDef
其他解决方案: