Relay从哪里获取GraphQL的Schema?

时间:2017-04-12 05:36:59

标签: reactjs graphql relayjs relay graphql-js

我正在运行基于GraphQL的服务器,我可以使用GraphiQL正确测试它。但我无法理解Relay的实现。

由于GraphQL位于服务器端,那么它的架构如何通过客户端的网络层传输到中继?或者它是如何指向相同的GraphQL的?

1 个答案:

答案 0 :(得分:0)

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

编辑:这是一个如何将模式文件转储到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) })
      }
    })
  })
}

获得后,您必须npm install babel-relay-plugin并将其包含在您的babel插件中(如果您正在使用它,可能在webpack配置中)。