Як прочитати файл у 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. Порівняння підходів
| Підхід | Метод | Асинхронність | Використання |
|---|---|---|---|
| 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()для великих файлів.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.