Давайте научимся проверять существование файла
или папки. В современном NodeJS это
делается особым образом через метод
fs.access
, проверяющий возможность
доступа к файлу.
Для начала импортируем асинхронную
часть модуля fs
:
import fs from 'fs/promises';
Теперь из общей части модуля fs
импортируем специальные константы:
import { constants } from 'fs';
После этого в переменной constants
будет специальный объект с константами,
содержащими специальные флаги, которые
мы будем передавать параметром в метод
access
, изменяя его поведение.
Следующий флаг используется для проверки существования файла:
constants.F_OK
Давайте с помощью этого флага проверим
существование файла test.txt
:
fs.access('test.txt', constants.F_OK);
Наш метод access
своим резульатом
возвращает промис. Если файл существует,
но промис зарезолвится, а если нет - то
зареджектится:
fs.access('test.txt', constants.F_OK).then(() => {
console.log('file exists');
}).catch(() => {
console.error('file does not exists');
});
Давайте перепишем наш код через await
.
Для этого обернем вызов access
в
конструкцию try-catch
:
try {
await fs.access('test.txt', constants.F_OK);
console.log('file exists');
} catch {
console.error('file does not exists');
}
Проверьте, существует ли файл test.txt
.
Если существует, прочитайте его текст.
Другие флаги
В наш метод access
можно передавать
и другие флаги. К примеру, следующий флаг
используется для проверки разрешения на
чтение файла:
constants.R_OK
А следующий флаг используется для проверки разрешения на запись файла:
constants.W_OK
Давайте выполним проверку файла на возможность чтения:
try {
await fs.access('test.txt', constants.R_OK);
console.log('can read');
} catch {
console.error('cannot read');
}
А теперь выполним проверку файла на возможность записи:
try {
await fs.access('test.txt', constants.W_OK);
console.log('can write');
} catch {
console.error('cannot write');
}
А теперь проверим файл и на то, и на другое:
try {
await fs.access('test.txt', constants.R_OK | constants.W_OK);
console.log('can access');
} catch {
console.error('cannot access');
}