NodeJS | Как проверить существование файла на сервере?

NodeJS | Как проверить существование файла на сервере?

Перед чтением какого-либо файла из директории на сервере при помощи NodeJS мы хотим предварительно проверять его существование. Мы хотим получать ИСТИНУ (true) если файл присутствует на сервере или ЛОЖЬ (false) если файла нет.

 

Зачем нужно проверять существование файла на сервере?

Если файл не будет существовать на сервере, то это может привести к ошибке чтения несуществующего файла. В результате вся программа может перестать работать, или перестанет работать отдельный модуль, или перестанет работать отдельная функция. Этих «или» может быть много и все они разные.

 

Модуль File System — fs

В NodeJS есть модуль File System (fs), который помогает работать с файловой системой нашего приложения — помогает работать с ФАЙЛАМИ и ПАПКАМИ.

 

Метод existsSync ( path )

Метод existsSync принимает один параметр path. При вызове он возвращает true, если путь существует, иначе false — если путь НЕ существует. «ПУТЬ» — это папка или файл.

Параметр может быть передан в трёх видах:

  • Строка (string)
  • Буффер (Buffer)
  • Унифицированный Локатор Ресурса (URL)

 

Подключение метода existsSync ( path )

import { existsSync } from 'node:fs';

if (existsSync('/etc/passwd'))
   console.log('Путь существует.');

 

Пример кода модуля, который отвечает строкой с логическим true или false на проверку существования картинки «/img/sipo-60.jpg» на сервере

// Подключаем встроенный модуль файловой системы
const fs = require('fs')

// Экспортируем из модуля функцию, которая принимает объекты ЗАПРОСА и ОТВЕТА
module.exports = function test(req, res){

   // Создаём блок отлова возможных ошибок
   try {

      // Код ответа сервера устанавливаем в 200
      res.statusCode = 200;

      // Добавляем нашему ответу заголовок типа контента и его кодировки для отображения русских символов
      res.setHeader('Content-Type', 'text/html; charset=utf-8');

      // Отдаём в ответе строку HTML-разметку
      res.end(`<h2>Картинка есть или нет на сервере? ${fs.existsSync(__dirname + '/img/sipo-60.jpg')}</h2>`);
   } catch (error) {
      res.statusCode = 502;
      res.setHeader('Content-Type', 'text/html; charset=utf-8');
      res.end(`<h1>Ошибка обработки</h1><p>${error}</p>`);
   }
}

Этот код будет работать даже если файла не будет существовать на сервере.

 

Информационные ссылки

Стандарт NodeJS — Модуль «File System» — https://nodejs.org/dist/latest-v18.x/docs/api/fs.html

Стандарт NodeJS — Раздел «fs.existsSync(path)» — https://nodejs.org/dist/latest-v18.x/docs/api/fs.html#fsexistssyncpath