包含在节点进程而不是服务器中的GraphQL解析器?

时间:2019-05-19 09:28:29

标签: node.js graphql

我需要创建类似于GraphQL服务器的内容,但完全包含在节点进程中,而不是实际的服务器中。因此,从本质上讲,这是一个JavaScript函数,您可以将查询或突变作为字符串来调用,并且它将基于解析器返回具有响应的对象或字符串。

我知道这是一个奇怪的要求。我们需要在我的公司模拟GraphQL服务器,由于构建流程中的某些限制,我们无法运行实际的服务器。

很抱歉,这是一个悬而未决的问题,但我不知道从哪里开始。哪个软件包包含GraphQL的核心功能?如果要制作GraphQL服务器,我会使用Apollo Server或GraphQL Yoga软件包,但是Google很难满足我的需求,因为这是一个不寻常的要求。

1 个答案:

答案 0 :(得分:0)

您只需要原始的GraphQL.js包(graphql)即可对模式执行查询。程序包导出带有以下签名的graphql函数:

graphql(
  schema: GraphQLSchema,
  requestString: string,
  rootValue?: ?any,
  contextValue?: ?any,
  variableValues?: ?{[key: string]: any},
  operationName?: ?string
): Promise<GraphQLResult>

从文档中

  

graphql函数可提取,解析,验证和执行GraphQL请求。它需要一个架构和一个requestString。可选参数包括rootValue(将作为根值传递给执行程序),contextValue(将被传递给所有解析函数),variableValues(将被传递给执行程序以为requestString中的任何变量提供值)和operationName ,如果requestString包含多个顶级操作,则调用者可以指定将运行requestString中的哪个操作。

因此,有了一个模式,您可以执行以下操作:

const request = `
  query MyQuery {
    someField
  }
`
const { data, errors } = graphql(schema, request)

注意:如果您通常将typeDefsresolvers传递给ApolloServer配置,则可以通过将它们传递给GraphQLSchema'来创建graphql-tools对象而是使用makeExecutableSchema(这是apollo-servergraphql-yoga的主要作用)。