Настройте сервер, который возвращает массив объектов GraphQL, определяемых внутренним языком


Сборка в соответствии с руководством по apollographql

https://www.apollographql.com/docs/apollo-server/getting-started/#step-1-create-a-new-project

Создайте каталог и npm init

mkdir ~/source/gq2
cd ~/source/gq2
npm init --yes
Войдите в полноэкранный режим Выход из полноэкранного режима

Создайте каталог и инициализируйте npm

  "name": "gq2",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
Войдите в полноэкранный режим Выход из полноэкранного режима

На этот раз не были введены ни private: true, ни type:module.

Установите apollo-server и grapql

npm install apollo-server graphql
Войдите в полноэкранный режим Выход из полноэкранного режима

Установите apollo-server и graphql в проект.


Потребуйте библиотеку, используемую в index.js, с apollo-сервера и создайте определения типов как typeDefs в grapql.

const { ApolloServer, gql } = require('apollo-server');

const typeDefs = gql`
  type Book {
    title: "String"
    author: String
  }

  type Query {
    books: [Book]
  }
`;
Войдите в полноэкранный режим Выход из полноэкранного режима

Импортируйте gql и его семейство из apollo-server с помощью require.

Прежде всего, используйте gql в качестве определения типа в typeDefs для создания необходимого корня Query.
Затем привяжите к нему Книгу с названием и автором.


Создавайте книги в index.js как массив реальных объектов данных.

const books = [
  {
    title: 'The Awakening',
    author: 'Kate Chopin',
  },
  {
    title: 'City of Glass',
    author: 'Paul Auster',
  },
];
Войдите в полноэкранный режим Выход из полноэкранного режима

Создайте массив объектов реальных данных.


Напишите резолверы в index.js для ответа на входящие запросы.

const resolvers = {
  Query: {
    books: () => books,
  },
};
Войдите в полноэкранный режим Выход из полноэкранного режима

Настройте преобразователь так, чтобы он возвращал объект books при поступлении запроса books.


Используйте ApolloServer для создания определений типов и резольверов, а также добавьте защиту csrf и Cache Bounded.

const server = new ApolloServer({
  typeDefs,
  resolvers,
  csrfPrevention: true,
  cache: 'bounded',
});
Войдите в полноэкранный режим Выход из полноэкранного режима

Соберите вместе определения типов и резольверы, добавьте защиту csrf и Cache Bounded.


Запустите сервер с помощью listen, прочитайте url после запуска с помощью .then и выведите в консоль.

server.listen().then(({ url }) => {
  console.log(`🚀  Server ready at ${url}`);
});
Войдите в полноэкранный режим Выход из полноэкранного режима

Это приведет к запуску сервера.

В содержимом listen обычно настраивается запуск экспресс-сервера http и т.д.


Запустите сервер и проверьте его в браузере.

node index.js 
🚀  Server ready at http://localhost:4000/
Войдите в полноэкранный режим Выход из полноэкранного режима

Убедитесь, что сервер открыт.

Если вы запрашиваете только название книг

Отображаются только заголовки двух данных.

Если вы также укажете автора в запросе, вы увидите
Мы подтвердили, что в ответе возвращаются и название, и автор двух данных.

ответ.

curl --request POST 
>    --header 'content-type: application/json' 
>    --url http://localhost:4000/ 
>    --data '{"query":"query ExampleQuery { books { title, author }}"}' 


{"data":{"books":[{"title":"The Awakening","author":"Kate Chopin"},{"title":"City of Glass","author":"Paul Auster"}]}}

Войдите в полноэкранный режим Выход из полноэкранного режима

Я смог подтвердить, что содержимое возвращается, даже если я делаю POST-запрос с помощью curl.
Содержимое было возвращено.

Оцените статью
devanswers.ru
Добавить комментарий