如何在GraphQL解析器中设置(数据库或其他)上下文?

时间:2017-05-27 18:59:00

标签: node.js graphql

一个解析器函数的GraphQL文档give an example,它接受​​一个名为" context"的参数。

他们不得不这样说 -

  

context提供给每个解析程序的值,包含重要的上下文信息,如当前登录的用户或访问数据库。

他们的代码示例如下所示 -

Query: {
  human(obj, args, context) {
    return context.db.loadHumanByID(args.id).then(
      userData => new Human(userData)
    )
  }
}

在我看来,在解析器函数中想要数据库访问是一种非常自然的模式,毫不奇怪,这是我需要做的事情。

显然,这个数据库上下文不会自动设置,因为GraphQL完全不了解您的特定数据持久性方法。

我的问题是,如何配置此上下文以提供特定的数据库接口?我无法在教程/文档或其他任何地方找到这一点。

2 个答案:

答案 0 :(得分:4)

设置服务器时定义

上下文。我也无法在文档中看到它。

graphqlExpress(req => {
  return {
    schema: makeExecutableSchema({
      typeDefs: schema.ast,
      resolvers,
      logger
    }),
    context: {
      db: mongodb.MongoClient.connect(...)
    }
  };
})

答案 1 :(得分:2)

调用graphql函数时,您可以将上下文传递给graphql 它被指定为here

以下是graphql函数的流程定义:

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