В документах GraphQL приведен пример функции распознавателя, которая принимает аргумент, называемый « контекст » .

Они должны сказать это об этом -

context Значение, которое предоставляется каждому распознавателю и содержит важную контекстную информацию, такую как зарегистрированный в данный момент пользователь или доступ к базе данных.

И их пример кода выглядит следующим образом -

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

Мне кажется, это вполне естественный шаблон, когда требуется доступ к базе данных внутри функции распознавателя, и неудивительно, что это то, что мне нужно сделать.

Очевидно, что этот контекст базы данных не устанавливается автоматически, поскольку GraphQL совершенно не зависит от ваших конкретных способов сохранения данных.

Мой вопрос заключается в том, как настроить этот контекст для обеспечения определенного интерфейса БД? Я не могу найти упоминания об этом в руководствах / документах или где-либо еще.

5
metahamza 27 Май 2017 в 21:59

2 ответа

Лучший ответ

Вы можете передать контекст в graphql при вызове функции graphql.
Он указан здесь.

Вот определение потока функции graphql:

graphql(
  schema: GraphQLSchema,
  requestString: string,
  rootValue?: ?any,
  contextValue?: ?any, // Arbitrary context
  variableValues?: ?{[key: string]: any},
  operationName?: ?string
): Promise<GraphQLResult>
2
yachaka 31 Май 2017 в 09:11

Контекст определяется при настройке вашего сервера. Я не мог видеть это в документах также.

graphqlExpress(req => {
  return {
    schema: makeExecutableSchema({
      typeDefs: schema.ast,
      resolvers,
      logger
    }),
    context: {
      db: mongodb.MongoClient.connect(...)
    }
  };
})
4
otissv 28 Май 2017 в 04:37