Как проверить, существует ли файл в Node.js
Короткий ответ
existsSync() из node:fs возвращает true или false:
import { existsSync, writeFileSync } from 'node:fs';
writeFileSync('config.json', '{}');
console.log(existsSync('config.json'));
console.log(existsSync('missing.json'));Результат:
true
falseС промисами
В асинхронном коде access() выбрасывает ошибку, если файла нет:
import { access, writeFile } from 'node:fs/promises';
const exists = async (path) => {
try {
await access(path);
return true;
} catch {
return false;
}
};
await writeFile('data.txt', '');
console.log(await exists('data.txt'), await exists('nope.txt'));Результат:
true falseФайл или папка
stat() сообщает, на что указывает путь:
import { mkdir, stat, writeFile } from 'node:fs/promises';
await mkdir('uploads', { recursive: true });
await writeFile('uploads/photo.jpg', 'abc');
console.log((await stat('uploads')).isDirectory());
console.log((await stat('uploads/photo.jpg')).isFile());Результат:
true
trueЧастая ошибка
Сначала проверить, потом прочитать — между этими шагами файл может исчезнуть. Если файл всё равно нужно прочитать, просто читайте его и обрабатывайте ошибку ENOENT:
import { readFile } from 'node:fs/promises';
const text = await readFile('settings.txt', 'utf8').catch((error) => {
if (error.code === 'ENOENT') return 'default settings';
throw error;
});
console.log(text);Результат:
default settingsФункции из этого ответа
- try...catch — Перехватывает ошибки, чтобы программа не остановилась.