Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як відправити HTTP-запит з Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Найпростіше - глобальним `fetch()` (доступний з Node.js 18+, без залежностей); для повного контролю над заголовками й стрімами - вбудований `http.request()`/`https.request()`; для зручного API з interceptors, таймаутами й retry - бібліотеки на кшталт axios чи got. **Ключове:** `fetch()` покриває ~95% випадків, `http.request()` дає низькорівневий контроль, а `pipeline()` варто використовувати для стрімінгового завантаження файлів без буферизації в пам'яті.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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`).Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.