【问题标题】:How can I break apart a GraphQL Schema into multiple files in graphql-yoga如何在 graphql-yoga 中将 GraphQL Schema 拆分为多个文件
【发布时间】:2020-05-22 18:38:04
【问题描述】:

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

如您所见,它说它找不到我的一种类型(用户),但我确实在 User.graphql 模式文件中找到了它。当我将所有内容都放在一个文件中并将该文件仅作为 typeDefs 传递时,它可以正常工作。提前感谢您的帮助!

【问题讨论】:

  • 说某事不起作用并不是特别有用——如果您看到错误,您应该编辑您的问题以包含完整的错误消息。传入路径数组应该可以正常工作,但您可能需要绝对文件路径,而不是相对路径,因为您的代码已编译。
  • 很抱歉。我是堆栈溢出的新手。我添加了更多细节。我尝试了绝对路径,但仍然失败并出现上面列出的错误。

标签: javascript graphql


【解决方案1】:
const typeDefs = [  
  './schemas/query.graphql',   
  './schemas/mutation.graphql',  
  './schemas/user.graphql'  
];

这只是一个字符串数组

来自文档:

typeDefs - String or Function or DocumentNode or array of previous

你可以做这样的事情:

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

const typeDefs = [Query, Mutation, User];

需要配置:https://github.com/apollographql/graphql-tag#webpack-preprocessing-with-graphql-tagloader

【讨论】:

猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 2019-06-28
  • 2019-11-25
  • 1970-01-01
  • 2018-09-07
  • 2018-10-18
  • 2019-04-27
  • 2019-09-06
相关资源
最近更新 更多