# Проверка существования файла в NodeJS

Давайте научимся проверять существование файла или папки. В современном 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'); }`
← →
↑