Как получить доступ к значению родительского распознавателя внутри распознавателя полей при использовании buildSchema? - PullRequest
0 голосов
/ 20 февраля 2019

Когда мы используем graphqlHTTP, первый аргумент, передаваемый методу разрешения, на самом деле - это параметры, передаваемые клиентским запросом, а не root, это нормально для распознавателя запросов.Но для сценария использования, где средство распознавания полей должно знать о значении родителя, как этого достичь?

type Person {
    name: String,
    cityId: String,
    city: City,
}

В приведенном выше сценарии я хотел бы, чтобы город был преобразователем полей, и ему необходим доступ.to cityId, который является свойством родительского типа.Я предполагаю, что это должно было быть передано в качестве параметра для распознавателя поля, но это не так.Есть ли способ достичь этого?

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

1 Ответ

0 голосов
/ 20 февраля 2019

Краткий ответ: не использовать buildSchema .

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

Возможны следующие варианты:

  1. Построить схему программно, а не использоватьЯзык определения схемы (SDL).Это позволит вам указать функцию resolve для любого поля в вашей схеме, и эта функция разрешения получит все четыре параметра (родительское значение, аргументы, контекст и информация).Вы можете проверить документы для некоторых примеров.

  2. Напишите вашу схему в SDL, но используйте makeExecutableSchema из graphql-tools для генерации вашего экземпляра GraphQLSchema.makeExecutableSchema позволяет безболезненно вводить средства распознавания для любых полей и предоставляет ряд других функций.Более подробную информацию о том, как сгенерировать схему таким способом, можно найти здесь .

  3. Дамп express-graphql для apollo-server, который использует makeExecutableSchema под капотоми предоставляет ряд дополнительных функций, которых нет у express-graphql. Проверьте документы , чтобы начать.

...