Домашнее задание к лекции 1.1 «Модули и работа с файлами»

Задача 1. Чтение и запись файла на промисах.

Создать модуль file-promise, который должен экспортировать объект со свойствами:

Пример использования


const file = require('./file-promise');

file
  .read('./data.txt')
  .then(data => data.toUpperCase())
  .then(data => file.write('./upper-data.txt', data))
  .then(filename => console.log(`Создан файл ${filename}`))
  .catch(err => console.error(err));
      

Если модуль правильно реализован, и будет доступен файл data.txt, то рядом будет создан файл upper-data.txt в котором будет содержимое файла data.txt в верхнем регистре и выведено сообщение Создан файл ./upper-data.txt. Иначе сообщение о любой возникшей ошибке будет выведено в консоль.

Описание функции read

Принимает аргументы:

  1. file — путь к файлу который необходимо прочитать, строка

Функция должна вернуть объект Promise, который разрешится содержимым файла, строка в кодировке UTF-8.

Функция не должна сама обрабатывать ошибки при чтении файла, а просто передавать исключения в промис как есть.

Описание функции write

Принимает аргументы:

  1. file — путь к файлу в который записать данные, строка
  2. data — данные которые необходимо записать, строка в кодировке UTF-8

Функция должна вернуть объект Promise, который разрешится путем к файлу, строка, который был передан в функцию.

Функция не должна сама обрабатывать ошибки при записи файла, а просто передавать исключения в промис как есть.

Задача 2. Чтение всех файлов в папке на промисах

Создать модуль read-all, который экспортирует функцию. Данная функция должна прочитать все файлы в папке и вернуть промис, который разрешится их содержимым.

Пример использования


const readAll = require('./read-all');

function show(file) {
  console.log('-'.repeat(10));
  console.log(`Содержимое файлы ${file.name}:`);
  console.log(file.content);
  console.log('-'.repeat(10));
}

readAll('./logs/')
  .then(files => files.forEach(show))
  .catch(err => console.error(err));
      

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

Описание функции

Принимает аргументы:

  1. path — путь к папке, содержимое файлов в которой требуется прочитать, строка

Функция должна вернуть объект Promise, который разрешится массивом объектов, каждый из которых представляет один файл в папке и имеет структуру:

Обрабатывать вложенные папки не требуется.

Функция не должна сама обрабатывать ошибки при чтении файла, а просто передавать исключения в промис как есть.

Задача 3. Информация о файле без промисов

Создать модуль path-info, который экспортирует функцию, которая вернет расширенную информацию о переданном пути.

Пример использования


const pathInfo = require('./path-info');

function showInfo(err, info) {
  if (err) {
    console.log('Возникла ошибка при получении информации');
    return;
  }

  switch (info.type) {
    case 'file':
      console.log(`${info.path} — является файлом, содержимое:`);
      console.log(info.content);
      console.log('-'.repeat(10));
      break;
    case 'directory':
      console.log(`${info.path} — является папкой, список файлов и папок в ней:`);
      info.childs.forEach(name => console.log(`  ${name}`));
      console.log('-'.repeat(10));
      break;
    default:
      console.log('Данный тип узла не поддерживается');
      break;
  }
}

pathInfo(__dirname, showInfo);
pathInfo(__filename, showInfo);
      

Если модуль правильно реализован, то первый вызов покажет содержимое текущей папки, а второй содержимое файла скрипта.

Описание функции

При реализации функции нельзя использовать промисы. Принимает аргументы:

  1. path — путь к папке, информацию о котором требуется получить, строка
  2. callbackфункция обратного вызова, в которую передаётся результат работы, когда он готов.

Функция ничего не возвращает. Но должна передать в функцию обратного вызова следующие аргументы:

  1. err — информация о возникшей ошибке, оригинальный объект, либо null.
  2. info — информация о пути, объект, либо undefined в случае ошибки.

Структура объекта с информацией о пути: