HTTP-клиент для JavaScript (Node.js): топ библиотек

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

HTTP-клиент для JavaScript (Node.js): топ библиотек для работы с сетью

В современной веб-разработке на Node.js отправка HTTP-запросов — одна из самых частых операций. Будь то обращение к REST API, загрузка файлов или взаимодействие с микросервисами — без надежного HTTP-клиента не обойтись. В этой статье мы подробно разберем четыре лучшие библиотеки для JavaScript (Node.js): Axios, Got, node-fetch и undici. Вы узнаете их особенности, производительность и получите готовые примеры кода.

1. Axios — универсальный стандарт

Axios — самый популярный HTTP-клиент для Node.js и браузеров. Он построен на Promise и поддерживает перехватчики (interceptors), автоматический парсинг JSON, защиту от CSRF и отмену запросов.

Установка:

npm install axios

Пример GET-запроса:

const axios = require('axios');

async function getUser(id) {
  try {
    const response = await axios.get(`https://api.example.com/users/${id}`);
    console.log(response.data);
  } catch (error) {
    console.error('Ошибка:', error.message);
  }
}

getUser(1);

Пример POST с заголовками:

const axios = require('axios');

const data = { name: 'Alice', role: 'developer' };

axios.post('https://api.example.com/users', data, {
  headers: { 'Content-Type': 'application/json' }
}).then(res => console.log(res.status));

Плюсы: простота, обширная экосистема, поддержка прогресса загрузки.

Минусы: размер пакета (~100 КБ), избыточность для простых задач.

2. Got — быстрый и функциональный

Got — легковесный HTTP-клиент с богатым API. Он поддерживает потоковую передачу, кэширование, повторные попытки и работает быстрее Axios.

Установка:

npm install got

Пример с потоком и обработкой ошибок:

const got = require('got');
const fs = require('fs');

async function downloadFile(url, outputPath) {
  try {
    const stream = got.stream(url);
    const fileStream = fs.createWriteStream(outputPath);
    stream.pipe(fileStream);

    await new Promise((resolve, reject) => {
      stream.on('end', resolve);
      stream.on('error', reject);
    });
    console.log('Файл загружен');
  } catch (error) {
    console.error('Ошибка загрузки:', error.message);
  }
}

downloadFile('https://example.com/file.zip', './file.zip');

Пример с повторными попытками:

const got = require('got');

got('https://api.example.com/data', {
  retry: { limit: 3, methods: ['GET'] }
}).then(response => console.log(response.body));

Плюсы: малый размер, скорость, встроенные ретраи.

Минусы: менее интуитивный API для новичков.

3. node-fetch — знакомый синтаксис из браузера

node-fetch — порт браузерного Fetch API для Node.js. Идеален, если вы привыкли к fetch в браузере и хотите единообразный код.

Установка:

npm install node-fetch

Пример с async/await:

const fetch = require('node-fetch');

async function getPosts() {
  const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
  if (!response.ok) throw new Error('HTTP error ' + response.status);
  const data = await response.json();
  console.log(data.title);
}

getPosts();

Пример отправки FormData:

const fetch = require('node-fetch');
const FormData = require('form-data');

const form = new FormData();
form.append('file', fs.createReadStream('./photo.jpg'));

fetch('https://api.example.com/upload', {
  method: 'POST',
  body: form
}).then(res => console.log(res.status));

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

Минусы: нет встроенных таймаутов, нужно добавлять abort-controller.

4. undici — максимальная производительность

undici — современный HTTP-клиент от команды Node.js, написанный на C++ для максимальной скорости. Рекомендуется для высоконагруженных систем.

Установка:

npm install undici

Пример базового запроса:

const { request } = require('undici');

async function fetch                    

Рекомендаций