Ты читаешь и записываешь файлы с помощью модуля fs/promises и строишь надёжные пути благодаря модулю path.
Открыть этот урок в KodokonВ браузере JavaScript не имеет права трогать файлы на твоём диске: это вопрос безопасности. Node, наоборот, работает прямо на твоей машине и умеет читать и записывать файлы благодаря модулю fs (file system). Мы будем использовать его современную версию, fs/promises, у которой каждая функция возвращает промис - ты уже умеешь их дожидаться через await, знакомый по направлению JavaScript. Обрати внимание на префикс node: в импортах: он ясно показывает, что модуль поставляется самим Node, а не берётся из node_modules. И хорошая новость: в модуле ES await работает прямо на уровне файла, без окружающей функции.
import { writeFile } from "node:fs/promises";
await writeFile("notes.txt", "First note\n");
console.log("File created!");Для чтения логика та же, с readFile. Его второй параметр очень важен: utf8 обозначает кодировку, то есть способ переводить байты, сохранённые на диске, в читаемый текст. Если его не указать, Node вернёт объект Buffer - сырые байты - вместо строки.
import { readFile } from "node:fs/promises";
const text = await readFile("notes.txt", "utf8");
console.log(text);Поговорим о путях. Относительный путь (notes.txt, data/log.txt) отсчитывается от текущей папки; абсолютный путь (C:\... или /home/...) начинается от корня диска. Классическая ловушка: Windows разделяет папки символом \, а macOS и Linux - символом /. Модуль path решает эту проблему: path.join собирает части с правильным разделителем, какой бы ни была система. Совместим его с mkdir, который создаёт папку.
import path from "node:path";
import { mkdir, writeFile } from "node:fs/promises";
const file = path.join("data", "log.txt");
await mkdir("data", { recursive: true });
await writeFile(file, "First log\n");
console.log("Written to:", file);