Как получить доступ к свойствам пути запроса в резольвере? GraphQL - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть база данных со следующей структурой.

Graph Database Я пишу решатель GraphQL для самого нижнего узла (узла "lines").

Как показано на рисунке, каждый узел "строк" соответствует указанному пути c. (Компания) -> (БД) -> (Таблица) -> (строки)

Запрос будет иметь вид:

{
  Company(name: "Google") {
    Database(name: "accounts") {
      Table(name: "users") {
        rows
      }
    }
  }
}

Вопрос: Как могу ли я включить / access Company.name, Database.name, Table.name информацию в распознаватель rows, чтобы я мог определить, какой rows узел вернуть?

Другими словами: я знаю, что могу получить доступ к Table.name, используя parent.name, но есть ли способ получить parent.parent.name или parent.parent.parent.name?

Если нет способа получить доступ к свойствам предка, я должен использовать аргументы или контекст для передачи эти свойства вручную в rows resolver?

Примечание: я не могу использовать пакет neo4j-graphql- js.

Примечание: Это первый простой пример, который я подумал и я понимаю, что существуют структурные проблемы с организацией данных таким образом, но вопрос все еще остается.

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете извлечь путь из объекта GraphQLResolveInfo, переданного в преобразователь:

const { responsePathAsArray } = require('graphql')

function resolver (parent, args, context, info) {
  responsePathAsArray(info.path)
}

Возвращает массив, подобный ['google', 'accounts', 0, 'user']. Однако вы также можете передавать произвольные данные из родительского распознавателя в дочерний распознаватель.

function accountResolver (parent, args, context, info) {
  // Assuming we already have some value at parent.account and want to return that
  return {
    ...parent.account,
    message: 'It\'s a secret!',
  }
}

function userResolver (parent, args, context, info) {
  console.log(parent.message) // prints "It's a secret!"
}

Если message не совпадает с каким-либо именем поля, оно фактически никогда не появится в вашем ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...