Skip to main content

Як створити директорію через Node.js?

1. Асинхронне створення папки (через callback)

Класичний спосіб:

javascript
import fs from 'fs'; fs.mkdir('./uploads', (err) => { if (err) { console.error('Помилка під час створення папки:', err); return; } console.log('Папку створено!'); });
  • Якщо папка вже існує → буде помилка EEXIST;
  • Цей метод не блокує event loop, безпечний для серверів.

2. Сучасний спосіб (через fs/promises і await)

Найзручніший і найсучасніший варіант - з промісами й async/await:

javascript
import { mkdir } from 'fs/promises'; try { await mkdir('./uploads'); console.log('Папку створено!'); } catch (err) { if (err.code === 'EEXIST') { console.log('Папка вже існує.'); } else { console.error('Помилка:', err); } }
  • Асинхронно, чисто й без callback-ів;
  • Рекомендується для всіх сучасних версій Node.js (v14+).

3. Створення вкладених директорій (рекурсивно)

Якщо потрібно створити вкладені папки, наприклад:

javascript
uploads/images/2025/january

Просто додай прапорець { recursive: true }:

javascript
import { mkdir } from 'fs/promises'; await mkdir('./uploads/images/2025/january', { recursive: true }); console.log('Вкладені папки створено!');
  • Node сам створить усі відсутні рівні;
  • Якщо директорія вже є - помилки не буде.

Це аналог команди в Linux:

javascript
mkdir -p uploads/images/2025/january

4. Синхронний спосіб (блокуючий)

Якщо ти створюєш папки при старті скрипта (наприклад, для логів чи конфігурацій):

javascript
import fs from 'fs'; try { fs.mkdirSync('./uploads'); console.log('Папку створено!'); } catch (err) { if (err.code === 'EEXIST') { console.log('Уже існує.'); } else { console.error('Помилка:', err); } }
  • Працює миттєво, але блокує event loop.
  • Не рекомендується для серверних застосунків, лише для setup-скриптів.

5. Перевірка існування перед створенням

Можна перевірити наявність папки заздалегідь:

javascript
import fs from 'fs'; if (!fs.existsSync('./uploads')) { fs.mkdirSync('./uploads'); console.log('Папку створено!'); } else { console.log('Папка вже є.'); }

Але в нових версіях Node краще просто використовувати { recursive: true } - перевірка не потрібна.

6. Права доступу (mode)

Параметр mode задає права доступу до папки (у UNIX-правах):

javascript
await mkdir('./secure', { mode: 0o700 });
  • 0o777 - усі користувачі можуть читати/писати/виконувати;
  • 0o700 - тільки власник;
  • За замовчуванням Node успадковує системні права.

7. Видалення й пересоздання (приклад)

Якщо потрібно очистити директорію перед пересозданням:

javascript
import { rm, mkdir } from 'fs/promises'; await rm('./uploads', { recursive: true, force: true }); await mkdir('./uploads'); console.log('Папку пересоздано!');

8. Обробка типових помилок

Код помилкиПричинаРішення
EEXISTПапка вже єВикористати { recursive: true }
ENOENTБатьківської папки не існуєВикористати { recursive: true }
EACCESНемає прав на створенняПеревірити права доступу
EPERMСистемна заборона (Windows)Запуск від імені адміністратора

9. Приклад - створення структури проєкту

javascript
import { mkdir } from 'fs/promises'; const dirs = ['logs', 'data/uploads', 'data/backups']; for (const dir of dirs) { await mkdir(dir, { recursive: true }); console.log(`${dir} створено`); }

Це створить потрібну структуру автоматично, навіть якщо частина папок відсутня.

10. Коротке резюме

МетодАсинхронністьСтворює вкладеніРекомендується
fs.mkdir()Так (callback)НіСтарий стиль
fs.promises.mkdir()Так (await)Так ({ recursive: true })Сучасний
fs.mkdirSync()НіНіЛише для CLI
fs.mkdirSync(..., { recursive: true })НіТакПри ініціалізації

Одним реченням

Щоб створити папку в Node.js, використовуй await fs.promises.mkdir('шлях', { recursive: true }) - це безпечно, сучасно, не блокує потік і автоматично створює вкладені директорії.

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

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

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