Учебники

GraphQL — Resolver

Resolver — это набор функций, которые генерируют ответ на запрос GraphQL. Проще говоря, распознаватель действует как обработчик запросов GraphQL. Каждая функция распознавателя в схеме GraphQL принимает четыре позиционных аргумента, как показано ниже:

fieldName:(root, args, context, info) => { result }

Пример функций распознавателя показан ниже —

//resolver function  with no parameters and returning string
greeting:() => {
   return "hello from  TutorialsPoint !!!"
}

//resolver function with no parameters and returning list
students:() => db.students.list()

//resolver function with arguments and returning object
studentById🙁root,args,context,info) => {
   return db.students.get(args.id);
}

Ниже приведены позиционные аргументы и их описание.

Sr.No. Аргументы и описание
1

корень

Объект, который содержит результат, возвращаемый распознавателем в родительском поле.

2

арг

Объект с аргументами, переданными в поле в запросе.

3

контекст

Этот объект является общим для всех распознавателей в конкретном запросе.

4

Информация

Он содержит информацию о состоянии выполнения запроса, включая имя поля, путь к полю от корня.

корень

Объект, который содержит результат, возвращаемый распознавателем в родительском поле.

арг

Объект с аргументами, переданными в поле в запросе.

контекст

Этот объект является общим для всех распознавателей в конкретном запросе.

Информация

Он содержит информацию о состоянии выполнения запроса, включая имя поля, путь к полю от корня.

Resolver Result Format

Решатели в GraphQL могут возвращать различные типы значений, как указано ниже —

Sr.No. Аргументы и описание
1

нулевой или неопределенный

это указывает на то, что объект не может быть найден

2

массив

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

3

обещание

распознаватели часто выполняют асинхронные действия, такие как выборка из базы данных или бэкэнд-API, поэтому они могут возвращать обещания

4

скаляр или объект

распознаватель также может возвращать другие значения

нулевой или неопределенный

это указывает на то, что объект не может быть найден

массив

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

обещание

распознаватели часто выполняют асинхронные действия, такие как выборка из базы данных или бэкэнд-API, поэтому они могут возвращать обещания

скаляр или объект

распознаватель также может возвращать другие значения

иллюстрация

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

Ниже приведен пошаговый процесс создания простого приложения:

Шаг 1 — Загрузите и установите необходимые зависимости для проекта

Создайте папку с именем resolver-app . Измените свой каталог на resolver-app с терминала. Далее выполните шаги с 3 по 5 в главе «Настройка среды».

Шаг 2 — Создание схемы

Добавьте файл schema.graphql в папку проекта resolver-app и добавьте следующий код —

type Query { 
   greeting:String
   students:[Student]
   studentById(id:ID!):Student 
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

Файл схемы показывает, что пользователь может запросить приветствие, студентов и studentById . Чтобы получить студентов с определенным идентификатором, мы используем идентификатор типа данных! который показывает необнуляемое поле уникального идентификатора. Поле студентов возвращает массив студентов, а приветствие возвращает простое строковое значение.

Шаг 3 — Создание резольвера

Создайте файл resolvers.js в папке проекта и добавьте следующий код —

const db = require('./db')
const Query = {
   //resolver function for greeting
   greeting:() => {
      return "hello from  TutorialsPoint !!!"
   },
   
   //resolver function for students returns list
   students:() => db.students.list(),

   //resolver function for studentbyId
   studentById🙁root,args,context,info) => {
      //args will contain parameter passed in query
      return db.students.get(args.id);
   }
}
module.exports = {Query}

Здесь studentById принимает три параметра. Как обсуждалось в этой главе, studentId может быть получен из аргументов; root будет содержать сам объект Query. Чтобы вернуть конкретного студента, нам нужно вызвать метод get с параметром id в коллекции студентов.

Здесь приветствие, Students, studentById являются резольверами, которые обрабатывают запрос. Функция распознавания студентов возвращает список студентов из слоя доступа к данным. Чтобы получить доступ к функциям распознавателя вне модуля, объект Query должен быть экспортирован с помощью module.exports.

Шаг 4 — Запустите приложение

Создайте файл server.js. См. Шаг 8 в главе «Настройка среды». Выполните команду npm start в терминале. Сервер будет работать на 9000 портов. Здесь мы используем GraphiQL в качестве клиента для тестирования приложения.

Откройте браузер и введите URL-адрес, http: // localhost: 9000 / graphiql . Введите следующий запрос в редакторе —

{  
   studentById(id:"S1001") {
      id
      firstName
      lastName
   }
}

Выходные данные для вышеупомянутого запроса как показано ниже —