Skip to main content

Як відправити HTTP-запит з Node.js?

1. Сучасний спосіб - fetch() (Node.js 18+)

Починаючи з Node.js 18, глобально доступний стандартний fetch(), точно такий самий, як у браузері.

javascript
const res = await fetch('https://api.example.com/data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Tim', age: 30 }), }); const data = await res.json(); console.log(data);

Переваги:

  • працює без додаткових бібліотек;
  • повертає Promise;
  • підтримує async/await;
  • вміє GET, POST, PUT, DELETE, PATCH;
  • автоматично підтримує HTTP/HTTPS, stream body, JSON тощо.

Важливо: якщо в тебе Node <18, потрібно встановити пакет:

javascript
npm install node-fetch

і імпортувати:

javascript
import fetch from 'node-fetch';

2. Низькорівневий спосіб - http.request() / https.request()

Якщо тобі потрібно більше контролю (заголовки, стрімінг, обробка chunk'ів), використовуй вбудований модуль node:http чи node:https.

Приклад GET-запиту:

javascript
import http from 'node:http'; const options = { hostname: 'example.com', path: '/data', method: 'GET', }; const req = http.request(options, (res) => { let body = ''; res.on('data', (chunk) => (body += chunk)); res.on('end', () => console.log('Відповідь:', body)); }); req.on('error', (err) => console.error('Помилка:', err)); req.end();

Приклад POST-запиту:

javascript
import https from 'node:https'; const data = JSON.stringify({ name: 'Tim' }); const options = { hostname: 'api.example.com', path: '/users', method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data), }, }; const req = https.request(options, (res) => { let body = ''; res.on('data', (chunk) => (body += chunk)); res.on('end', () => console.log('Відповідь:', body)); }); req.on('error', (err) => console.error(err)); req.write(data); req.end();

Тут ти вручну керуєш усім: заголовками, тілом, кодом статусу, а тіло відповіді читаєш як потік.

3. Потокове завантаження (через pipeline)

Ти можеш використовувати fetch() чи http.get() разом зі стрімами, наприклад, щоб завантажити файл без завантаження в пам'ять цілком:

javascript
import { createWriteStream } from 'node:fs'; import { pipeline } from 'node:stream/promises'; const res = await fetch('https://example.com/image.jpg'); await pipeline(res.body, createWriteStream('image.jpg')); console.log('Файл збережено');

4. Через сторонні бібліотеки (для зручності)

Якщо тобі потрібен функціонал на кшталт перехоплювачів, таймаутів, автоматичного JSON і retry - використовуй одну з популярних бібліотек:

Axios

javascript
npm install axios
javascript
import axios from 'axios'; const res = await axios.post('https://api.example.com/users', { name: 'Tim' }); console.log(res.data);
  • Автоматично серіалізує JSON
  • Легко обробляє помилки й статуси
  • Підтримує interceptors, таймаути, cookie, multipart тощо

Got

javascript
npm install got
javascript
import got from 'got'; const res = await got.post('https://api.example.com/users', { json: { name: 'Tim' }, responseType: 'json', }); console.log(res.body);

5. Що обрати

ПідхідКоли використовувати
fetch()95% випадків - стандарт, сучасно, просто
http.request()Коли потрібен повний контроль (заголовки, сокети, потоки)
axios / gotКоли проєкт великий, потрібен зручний API і перехоплювачі
pipeline()Для стрімінгових файлів (завантаження, скачування)

6. Коротко

У Node.js можна відправити HTTP-запит:

  • сучасно: fetch() (вбудовано з Node 18);
  • низькорівнево: через http.request() / https.request();
  • зручно: через axios чи got.

Усе залежить від того, чи хочеш ти простоту (fetch) чи максимальний контроль (request).

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.