Домашнее задание к лекции 1.1 «Модули и работа с файлами»
Задача 1. Чтение и запись файла на промисах.
Создать модуль file-promise
, который должен экспортировать объект со свойствами:
read
— функция, читает содержимое файла и возвращает промис, которой разрешится строкой с этим содержимым.write
— функция, создает или перезаписывает содержимое файла, и возвращает промис, который разрешится именем файла переданным в функцию.
Пример использования
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
Принимает аргументы:
file
— путь к файлу который необходимо прочитать, строка
Функция должна вернуть объект Promise
, который разрешится содержимым файла, строка в кодировке UTF-8.
Функция не должна сама обрабатывать ошибки при чтении файла, а просто передавать исключения в промис как есть.
Описание функции write
Принимает аргументы:
file
— путь к файлу в который записать данные, строка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
, то в консоль будут выведены названия и содержание всех файлов в этой папке. Иначе сообщение о любой возникшей ошибке будет выведено в консоль.
Описание функции
Принимает аргументы:
path
— путь к папке, содержимое файлов в которой требуется прочитать, строка
Функция должна вернуть объект Promise
, который разрешится массивом объектов, каждый из которых представляет один файл в папке и имеет структуру:
name
— название файла, строка.content
— содержимое файла, строка.
Обрабатывать вложенные папки не требуется.
Функция не должна сама обрабатывать ошибки при чтении файла, а просто передавать исключения в промис как есть.
Задача 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);
Если модуль правильно реализован, то первый вызов покажет содержимое текущей папки, а второй содержимое файла скрипта.
Описание функции
При реализации функции нельзя использовать промисы. Принимает аргументы:
path
— путь к папке, информацию о котором требуется получить, строкаcallback
— функция обратного вызова, в которую передаётся результат работы, когда он готов.
Функция ничего не возвращает. Но должна передать в функцию обратного вызова следующие аргументы:
err
— информация о возникшей ошибке, оригинальныйобъект
, либоnull
.info
— информация о пути, объект, либоundefined
в случае ошибки.
Структура объекта с информацией о пути:
path
— сам путь, как он передан в функцию, строка.type
— тип объекта, строка,file
— если это файл,directory
— если это папка, иначеundefined
content
— содержимое файла, строка в кодировке UTF-8,undefined
— если это не файл.childs
— список дочерних файлов и папок, массив строк,undefined
— если это не папка.