Fetch API — один из наиболее часто используемых способов делать HTTP-запросы в JavaScript. Он позволяет вам просто и эффективно отправлять и получать данные с серверов. Хотя он использовался в браузерных приложениях, недавние обновления Node.js ввели экспериментальную поддержку Fetch API, чтобы вы могли писать серверный код, не полагаясь на сторонние библиотеки.
В этом посте будет показано, как использовать Fetch API в Node.js для выполнения HTTP-запросов. Если вам нужно выполнить запросы GET или POST, обработать заголовки или сравнить Fetch API с Axios, этот пост поможет вам начать работу.
Давайте углубимся в это!
Оглавление
- Зачем использовать Fetch API для HTTP-запросов?
- Настройка Fetch API в Node.js
- Выполнение запросов GET с помощью Fetch API
- Обработка заголовков ответа в Fetch API
- Отправка POST-запросов с помощью Fetch API
- Обработка ошибок в Fetch API
- Fetch API против Axios: основные различия
- Заключение
- FAQ
Зачем использовать Fetch API для HTTP-запросов?
Fetch API — это современный и гибкий способ делать HTTP-запросы в JavaScript. Он упрощает процесс общения с API и серверами с помощью обещаний и делает ваш код чище и более удобным для обслуживания.

Вот несколько причин, по которым разработчикам нравится Fetch API:
Встроенная поддержка в современном JavaScript
Fetch API поддерживается во всех браузерах, и поскольку Node.js 17.5, он также поддерживается в серверном JavaScript. Нет необходимости в сторонних библиотеках, таких как Axios или node-fetch.Подход, основанный на обещаниях
В отличие от старых методов, таких как XMLHttpRequest, Fetch API использует обещания, чтобы вы могли избежать ада обратных вызовов и написать более читаемый асинхронный код.Гибкость и настраиваемость
Fetch API поддерживает все распространенные методы HTTP (GET, POST, PUT, DELETE) и позволяет добавлять пользовательские заголовки, легко обрабатывать данные JSON и управлять различными типами запросов и ответов.Легкое решение
Поскольку API Fetch встроен в современные среды JavaScript, вам не нужно устанавливать дополнительные библиотеки, что снижает зависимости вашего проекта и повышает эффективность.
Настройка Fetch API в Node.js
Прежде чем использовать Fetch API в Node.js, вам необходимо правильно настроить среду. Fetch API изначально доступен в Node.js 17.5 и выше, но в некоторых версиях все еще является экспериментальным. Давайте рассмотрим процесс настройки.
Шаг 1: Проверьте версию Node.js
Чтобы использовать Fetch API без установки дополнительных библиотек, вам нужен Node.js 17.5 или выше. Выполните следующую команду в терминале, чтобы проверить версию Node.js:
1 | узел -v |
Если ваша версия ниже 17.5, загрузите последнюю версию с сайта Официальном сайте.
Шаг 2: Включите экспериментальный API Fetch (необязательно)
Если вы используете версию 17.5 или выше, но все еще считаете Fetch API экспериментальным, вам может потребоваться включить его. Использовать --experimental-fetch при запуске вашего кода:
1 | узел --experimental-fetch your_code.js |
Шаг 3: Создайте проект Node.js
Если вы начинаете с нуля, создайте новый проект Node.js. Используйте следующие команды для инициализации вашего проекта и создания файла для вашего кода:
1 | MkDir fetch-api-demo |
Шаг 4: Используйте Fetch API
Теперь вы можете писать код Fetch API непосредственно в файле app.js. Например, базовый запрос GET выглядит так:
1 | получать('https://jsonplaceholder.typicode.com/posts/1') |
Использование сторонней библиотеки (необязательно)
Если вы работаете со старой версией Node.js или предпочитаете не обновляться, вы все равно можете использовать Fetch API, установив библиотеку node-fetch. Установите ее с помощью:
1 | npm install node-fetch |
Затем импортируйте и используйте его в своем коде следующим образом:
1 | Const получить = требовать('node-fetch'); |
Настройка Fetch API в Node.js проста. После этого вы можете начать делать HTTP-запросы. В следующем разделе мы рассмотрим, как использовать Fetch API для GET-запросов.
Выполнение запросов GET с помощью Fetch API
Запросы GET являются наиболее распространенным типом HTTP-запросов, используемых для извлечения данных с сервера. С Fetch API в Node.js делать запросы GET легко. Давайте посмотрим, как делать запросы GET и обрабатывать ответы.
Пример простого запроса GET
API Fetch позволяет вам извлекать данные с помощью fetch() функция, которая принимает URL ресурса в качестве первого параметра. Вот пример создания простого запроса GET:
1 | получать('https://jsonplaceholder.typicode.com/posts/1') |
Объяснение:
fetch()отправляет HTTP-запрос GET на URL.response.json()извлекает данные JSON из ответа.then()обрабатывает данные ответа.catch()отлавливает любые ошибки.
Использование Async-Await для GET-запросов
Async-await делает код чище. Вот тот же GET-запрос с использованием async-await:
1 | (асинхронной () => { |
Основные преимущества использования Async-Await:
- Это упрощает обработку обещаний, избегая вложенных
.then()звонки. - Его легче читать, особенно в случае сложной логики.
Извлечение нескольких ресурсов
Вы также можете получить несколько ресурсов одновременно. Вот пример:
1 | получать('https://jsonplaceholder.typicode.com/posts') |
Этот код извлекает список сообщений из API и выводит их в консоль.
Добавление параметров запроса
Чтобы включить параметры запроса в запрос GET, добавьте их к URL-адресу следующим образом:
1 | Const идентификатор пользователя = 1; |
Обработка ответов
API Fetch обеспечивает гибкость в обработке различных типов ответов, таких как простой текст, JSON или двоичный. Вот как можно обрабатывать ответ в виде простого текста:
1 | получать('https://jsonplaceholder.typicode.com/posts/1') |
Запросы GET — это хлеб и масло любого веб-API. С помощью Fetch API вы можете делать их и сохранять свой код чистым и читаемым. В следующем разделе мы рассмотрим обработку заголовков ответов в Fetch API.
Обработка заголовков ответа в Fetch API
Заголовки ответа предоставляют важные метаданные об ответе HTTP, такие как тип контента, сведения о сервере или инструкции по кэшированию. С помощью Fetch API вы можете легко получить доступ и работать с этими заголовками.
Доступ к заголовкам ответа
The Response объект, возвращаемый fetch() Функция имеет свойство заголовков. Это свойство является Headers объект, который позволяет читать и изменять заголовки ответа. Вот пример:
1 | получать('https://jsonplaceholder.typicode.com/posts/1') |
Что здесь происходит:
- response.headers — это объект со всеми заголовками, возвращаемыми сервером.
- Цикл for…of проходит по каждому заголовку и выводит пары ключ-значение.
Часто используемые заголовки
Некоторые из наиболее распространенных заголовков:
- Content-Type: Тип носителя ресурса (например,
application/json) - Cache-Control: Определяет поведение кэширования.
- Авторизация: Содержит учетные данные аутентификации.
Вы можете получить доступ к определенным заголовкам, используя get() Метод:
1 | получать('https://jsonplaceholder.typicode.com/posts/1') |
CORS и ограниченные заголовки
При использовании Fetch API в браузере правила Cross-Origin Resource Sharing (CORS) могут ограничивать доступ к заголовкам. По умолчанию отображаются только следующие заголовки:
Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma
В Node.js ничего из этого не применяется, поэтому у вас есть полный доступ ко всем заголовкам.
Практический пример использования: проверка статуса ответа
Вы можете использовать заголовки для проверки статуса ответа перед обработкой тела.
1 | получать('https://jsonplaceholder.typicode.com/posts/1') |
Это гарантирует обработку только допустимых ответов, что делает ваш код более надежным.
Понимая и используя заголовки ответов, вы можете управлять метаданными, обрабатывать ошибки и оптимизировать свои запросы API. В следующем разделе мы рассмотрим, как отправлять запросы POST с помощью Fetch API.
Отправка POST-запросов с помощью Fetch API
Fetch API упрощает отправку HTTP POST-запросов к API. Запрос POST используется, когда вы хотите отправить данные на сервер, например, отправка данных формы или создание новой записи в базе данных.
Отправка базового POST-запроса
Чтобы отправить запрос POST, вам необходимо включить method недвижимость в fetch() Объект options. Кроме того, свойство body используется для указания данных, которые вы хотите отправить. Вот пример:
1 | Const URL = 'https://jsonplaceholder.typicode.com/posts'; |
Что здесь происходит:
- URL: Конечная точка для запроса POST.
- Способ доставки: Указывает метод HTTP (
POST). - Заголовки: определяет
Content-Typeчтобы сообщить серверу, что данные имеют формат JSON. - Тело: Содержит данные в формате JSON для отправки.
Зачем использовать JSON.stringify?
При отправке данных с помощью Fetch API это должна быть строка. Вот где JSON.stringify() входит — он преобразует ваш объект JavaScript в строку JSON, понятную серверу.
Обработка ответов сервера
После отправки запроса POST вы обычно получаете ответ от сервера. Ответ может включать статус запроса и любые новые данные, созданные на сервере.
1 | получать(url, { |
Реальный вариант использования
Допустим, вы создаете форму регистрации пользователя. Вот как вы можете отправить данные формы с помощью запроса POST:
1 | Const пользователь = { |
Использование Fetch API для запросов POST позволяет отправлять данные на серверы. Далее мы рассмотрим обработку ошибок, чтобы ваши запросы были надежными.
Обработка ошибок в Fetch API
Обработка ошибок — важная часть выполнения HTTP-запросов с помощью Fetch API. Она гарантирует, что ваше приложение обрабатывает сетевые проблемы, недействительные ответы или неожиданные ошибки.
Почему важна обработка ошибок?
При выполнении HTTP-запросов может произойти многое:
- Сервер не работает.
- Неверный URL-адрес.
- Реакция оказалась не такой, как мы ожидали.
- Сеть прервет запрос.
Если вы не обрабатываете ошибки, ваше приложение выйдет из строя или зависнет, а пользователю придется несладко.
Обработка ошибок с помощью then и catch
Fetch API возвращает Promise. Вы можете использовать .catch() метод обработки ошибок во время запроса.
Рассмотрим пример:
1 | получать('https://invalid-url.example.com') |
Ключевые моменты:
if (!response.ok)проверяет, находится ли статус ответа HTTP в диапазоне 200–299. Если нет, выдает ошибку..catch()отлавливает как сетевые ошибки, так и ошибки, возникающие в.then()цепь.
Использование Try-Catch с Async-Await
Для более чистого кода можно использовать async и await с try-catch блок для обработки ошибок.
Вот тот же пример:
1 | (асинхронной () => { |
Преимущества Try-Catch:
- Легче читать и понимать, особенно в случае сложной логики.
- Группирует код обработки ошибок в одном месте.
Обработка тайм-аутов
По умолчанию Fetch API не поддерживает тайм-ауты запросов. Однако вы можете создать пользовательский тайм-аут с помощью Promise.race().
Вот как это реализовать:
1 | Const fetchWithTimeout = (URL, параметры, время ожидания = 5000) => { |
Что здесь происходит:
Promise.race()запускает два обещания: одно для запроса на выборку и одно для тайм-аута.- Если запрос на выборку занимает больше времени, чем тайм-аут (в этом примере 3 секунды), обещание тайм-аута отклоняет операцию.
Распространенные сценарии ошибок, на которые следует обратить внимание
- Неверные URL-адреса: Убедитесь, что конечные точки API указаны правильно. 2.** Проблемы с сетью**: Обрабатывайте случаи, когда сеть недоступна.
- Ответы не в формате JSON: Если сервер отправляет данные, отличные от JSON, метод response.json() выдаст ошибку.
- Проблемы CORS: Убедитесь, что сервер разрешает кросс-доменные запросы, если вы работаете в браузере.
Регистрация ошибок для отладки
При возникновении ошибки ее регистрация может помочь в отладке:
1 | получать('https://example.com/api') |
Обработка ошибок сделает ваше приложение более стабильным и надежным. В следующем разделе мы сравним Fetch с Axios, чтобы помочь вам решить, какой из них использовать.
Fetch API против Axios: основные различия
При работе с HTTP-запросами в Node.js или браузере есть два варианта: Fetch API и Axios. Оба хороши, но отличаются. Давайте сравним их по ключевым пунктам, чтобы помочь вам сделать выбор.

Какой из них вы должны использовать?
Оба API Fetch и Axios имеют свои области применения, но все зависит от вашего проекта:
- Использовать API Fetch если вам нужно нативное решение без внешних зависимостей, и ваш проект ориентирован на современные браузеры или Node.js (с экспериментальной поддержкой).
- Используйте Аксиос если вам нужно больше функций, таких как перехватчики, более простая обработка ошибок, встроенные тайм-ауты или отмена запроса. Axios также хорош для поддержки старых браузеров.
Идем дальше: что делать, если Fetch недостаточно?
API Fetch хорошо подходит для создания простых HTTP-запросов в Node.js, но что делать, если:
- Сайт в значительной степени использует JavaScript.
- Вас блокируют такие средства защиты от ботов, как CAPTCHA или ограничения по IP?
- Вам необходимо надежно масштабировать запросы до тысяч страниц
В таких случаях имеет смысл использовать специализированное решение для парсинга, например Crawlbase, веб-платформа для парсинга, разработанная для выполнения всей тяжелой работы:
- Он автоматически обходит CAPTCHA и избегает блокировок по IP.
- Он отображает JavaScript, поэтому вы получаете полный HTML даже с современных сайтов.
- Он легко масштабируется без необходимости управления прокси-серверами или браузерами без интерфейса.
Знакомьтесь Crawlbaseи узнайте, как он может упростить ваши проекты по веб-скрапингу. Начните бесплатную пробную версию сегодня
FAQ
В. В чем разница между Fetch API и Axios?
Fetch API и Axios — это способы делать HTTP-запросы в JavaScript, но есть ключевые различия. Fetch — это встроенная функция браузера, которая поставляется с экспериментальной поддержкой Node.js, Axios — сторонняя библиотека. Axios упрощает такие вещи, как автоматический парсинг JSON и перехватчики запросов/ответов, которые Fetch не предлагает из коробки. Fetch, с другой стороны, проще и не требует дополнительных зависимостей.
В. Как обрабатывать ошибки с помощью Fetch API в Node.js?
Обработка ошибок в Fetch API проста. Поскольку Fetch возвращает обещание, вы можете использовать .catch() для обнаружения ошибок или использования try...catch async/await. Например, используя async/await, вы можете обрабатывать ошибки следующим образом:
1 | стараться { |
Это гарантирует, что любые проблемы, такие как сбои в работе сети или недействительные URL-адреса, будут обработаны должным образом.
В. Могу ли я использовать Fetch API для POST-запросов в Node.js?
Да, Fetch API отлично подходит для выполнения POST-запросов. Вам просто нужно указать method as POST и включать body (обычно JSON). Вот пример:
1 | Const ответ = Ждите получать(url, { |
Он отправляет данные на сервер и обрабатывает ответ как JSON.











