Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як прочитати файл у Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Чотири способи: `fs.readFile()` (callback, асинхронно), `fs/promises.readFile()` (найсучасніший, через `await`), `fs.readFileSync()` (синхронно, блокує потік) і `fs.createReadStream()` для дуже великих файлів. **Ключове:** для сервера завжди обирай асинхронний варіант - синхронний підходить лише для CLI-скриптів чи ініціалізації.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 1. Асинхронне читання (через callback) Підключаємо вбудований модуль `fs`: ```javascript import fs from 'fs'; ``` І читаємо файл: ```javascript fs.readFile('./data.txt', 'utf8', (err, data) => { if (err) { console.error('Помилка під час читання файлу:', err); return; } console.log('Вміст файлу:', data); }); ``` - `'utf8'` - щоб отримати рядок, а не `Buffer`. - Якщо файл не знайдено - буде помилка `ENOENT`. - Цей спосіб **не блокує** основний потік (асинхронний). ## 2. Асинхронне читання з `fs/promises` (через `async/await`) Сучасний, лаконічний і бажаний варіант. ```javascript import { readFile } from 'fs/promises'; try { const data = await readFile('./data.txt', 'utf8'); console.log('Вміст файлу:', data); } catch (err) { console.error('Помилка під час читання файлу:', err); } ``` Переваги: - Без callback-ів - зручно для `async/await`; - Код виглядає "синхронно"; - Відмінно підходить для сучасних застосунків (Node 14+). ## 3. Синхронне читання (блокуюче) Іноді зручно під час ініціалізації (наприклад, завантаження конфігурації): ```javascript import fs from 'fs'; try { const data = fs.readFileSync('./config.json', 'utf8'); console.log('Конфігурація:', data); } catch (err) { console.error('Помилка:', err); } ``` Але: - **Блокує** виконання коду, поки файл не прочитається; - Не рекомендується використовувати на сервері - тільки для CLI/ініціалізації. ## 4. Потокове читання (для великих файлів) Якщо файл дуже великий (гігабайти), краще використовувати **потоки (streams)** - вони читають файл по частинах, а не цілком у пам'ять. ```javascript import fs from 'fs'; const stream = fs.createReadStream('./bigfile.txt', 'utf8'); stream.on('data', chunk => { console.log('Отримано частину даних:', chunk); }); stream.on('end', () => { console.log('Читання завершено!'); }); stream.on('error', err => { console.error('Помилка:', err); }); ``` Переваги: - Не завантажує весь файл у пам'ять; - Можна обробляти дані в міру надходження; - Ідеально для логів, стримінгу, HTTP-відповідей. ## 5. Порівняння підходів | Підхід | Метод | Асинхронність | Використання | |---|---|---|---| | Callback | `fs.readFile()` | Так | Базовий, старий стиль | | Проміс | `fs/promises.readFile()` | Так | Сучасний стандарт | | Синхронний | `fs.readFileSync()` | Ні | Тільки для коротких скриптів | | Потік | `fs.createReadStream()` | Так | Для великих файлів | ## 6. Приклад: читання JSON-файлу ```javascript import { readFile } from 'fs/promises'; try { const raw = await readFile('./config.json', 'utf8'); const config = JSON.parse(raw); console.log('Config:', config); } catch (err) { console.error('Помилка читання JSON:', err); } ``` Node.js не парсить JSON автоматично - потрібно викликати `JSON.parse()`. ## Одним реченням > Щоб прочитати файл у Node.js, використовуй `fs.readFile()` (асинхронно), `fs/promises.readFile()` (через `await`) чи потік `fs.createReadStream()` для великих файлів.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.