如何从 GraphQLSchema javascript 对象获取 .graphql 文件?

Posted

技术标签:

【中文标题】如何从 GraphQLSchema javascript 对象获取 .graphql 文件?【英文标题】:how to obtain .graphql file from GraphQLSchema javascript object? 【发布时间】:2018-05-24 10:04:08 【问题描述】:

我正在使用graphql-js 创建一个新的graphQL 模式,但不会通过http 提供服务,将用作本地graphql 服务。我需要以 json 格式获取此 graphql 的架构,以将其与另一个架构合并。我一直在使用 get-graphql-schema 从服务器获取架构,但这在我的情况下不起作用。

我想要的是从我在 make new GraphQLSchema( query, mutation ); 之后获得的 GraphQLSchema 对象中获取带有架构的 json

我确信这很简单,但我有点坚持。谢谢!

【问题讨论】:

为什么get-graphql-schema 不可行? 【参考方案1】:

您可以在 localhost graphql 服务器上使用 get-graphql-schema。

【讨论】:

他特别说这个包对他不起作用 @vbranden 也许我误解了.. 你不是@Fernando 试图从 localhost 以 json 格式获取你提供的 graphql 模式吗?如果是这样,为什么get-graphql-schema 不能满足您的需求? 因为他试图从本地 GraphQLSchema 对象而不是 graphql 服务器端点创建 .graphql 文件。 get-graphql-schema 需要一个端点。 @vbranden 好的,抱歉,我认为 local graphql service 他的意思是 localhost 服务器【参考方案2】:

由于您想要本地创建的 GraphQLSchema 对象中的 .graphql 文件,您可以使用 printSchema 打印它然后将其写入文件

import  printSchema  from 'graphql';
import Query from './Query';
import fs from 'fs';

const schema = new GraphQLSchema(
  query: Query
);

const fileData = printSchema(schema);

fs.writeFile('/path/to/schema.graphql', fileData, error => 
  // handle error
);

get-graphql-schema 包只能与graphql-server 端点一起使用。该包首先发送自省查询以获取 JSON 表示,然后使用 graphql-js 重构客户端(非可执行)模式 buildClientSchema 然后使用 printSchema 最终输出可以放入 .graphql 文件中的模式语言表示。由于您已经在本地拥有 GraphQLSchema 对象,因此您可以跳过前两个步骤并打印架构。

【讨论】:

以上是关于如何从 GraphQLSchema javascript 对象获取 .graphql 文件?的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法使用来自另一个模块或领域的 GraphQLSchema“[object GraphQLSchema]”

如何在我的自定义类型中包含非命名模块 TS 定义

graphql.GraphQLSchema:使用啥类型的参数来获取查询以传递给 mongo db.collection.find 来解析查询

如何在 AppSync GraphQL 架构中使用自定义输入类型?

新 GraphQL buildSchema 的嵌套查询

如何修复这个 typescript 和 graphql 错误?