2017-04-12 64 views
1

我正在运行一个基于GraphQL的服务器,我可以使用GraphiQL正确地测试它。但我无法理解Relay的实现。Relay从哪里获取GraphQL的Schema?

由于GraphQL在服务器端,那么它的模式如何被转移到客户端的网络层中继?或者它如何指向相同的GraphQL?

回答

0

它需要一些额外的工作。基本上,您必须将架构的序列化版本转储到服务器端的文件,然后将该文件移到客户端,并在babel编译期间包含它。 Facebook有一个babel plugin,它接受这个文件并将其构建到包中,以便中继知道该模式。

编辑:这里是如何在获取,你必须npm install babel-relay-plugin,包括架构文件转储到JSON

import { graphql } from 'graphql' 
import { introspectionQuery, printSchema } from 'graphql/utilities' 

/* 
    generates json of our schema for use by relay 
*/ 
export default function (schema) { 
    return new Promise((resolve, reject) => { 
    graphql(schema, introspectionQuery).then(result => { 
     if (result.errors) { 
     console.error(`ERROR introspecting schema: ${result.errors}`) 
     reject(new Error(result.errors)) 
     } else { 
     resolve({ json: result, graphql: printSchema(schema) }) 
     } 
    }) 
    }) 
} 

一个片段,在你的通天插件(可能在的WebPack配置,如果你正在使用它)。