Skip to main content

Як прочитати файл у Node.js?

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. Порівняння підходів

ПідхідМетодАсинхронністьВикористання
Callbackfs.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() для великих файлів.

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

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

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