В файле index.js директории 01-read-file напишите скрипт выводящий в консоль содержимое файла text.txt.
- Запрещается использование любых сторонних модулей
- Каждое из заданий должно запускаться командой node <имя папки задания> выполненной в корневой директории
- Запрещается использование синхронных функций модуля fs такие как
fs.statSync(path[, options])
,fs.readFileSync(path[, options])
и другие находящиеся в разделе synchronous API
- Внутри папки 01-read-file находятся 2 файла index.js и text.txt
- При выполнении команды
node 01-read-file
в корневом каталоге репозитория в консоль выводится содержимое файла text.txt. - В коде не должны быть использованы синхронные методы чтения файла.
- Чтение файла должно происходить с помощью ReadStream.
- Познакомиться с основами работы с файловой системой на платформе Node.Js
- Изучить основы streams и events
- Ознакомиться с модулем Path и научиться применять его для построения абсолютного пути к файлам.
В данном задании от вас требуется написать небольшой скрипт, результатом работы которого будет вывод содержимого заранее подготовленного текстового файла в консоль. Для этого вы можете придерживаться данного порядка действий:
- Импортировать необходимые для выполнения задания модули:
- Для взаимодействия с файловой системой в NodeJs используется модуль fs, документацию которого можно найти по этой ссылке(перевод на русский приложен в разделе "Полезные ссылки").
- Для корректного указания пути к файлу вам понадобится модуль Path.
- Создать новый ReadStream из файла text.txt.
- Направить поток чтения в стандартный поток вывода.
Для импорта в Node.js используйте CommonJS modules. Несмотря на то, что в настоящее время Node.js уже имеет почти полную поддержку ECMAScript modules(import/export), данный подход ещё не полностью стабилен и подавляющее большинство кода с которым вы столкнётесь будет написано с помощью CommonJS.
Прим: const fs = require('fs');
Для считывания файла вы будете использовать потоки (streams), которые являются важной и полезной частью платформы. Благодаря им, вы можете налету обрабатывать огромные количества данных по чанку за раз, при этом расходуя минимальное количество ресурсов, вместо того, чтобы выгружать их в память целиком. В дальнейшем вы не раз столкнётесь с ними в своей работе. Так же, важным моментом будет ознакомление с ещё одной базовой концепцией платформы Node.js, а именно Events(события). Node.js использует события почти повсеместно, а большинство объектов являются наследниками класса EventEmitter. Для более полного понимания работы потоков при изучении рекомендую сначала ознакомиться именно с событиями, так как каждый поток является наследником EventEmitter. Материалы по данным темам так же приложены в разделе "Полезные ссылки".
При создании ReadStream обратите внимание на то, что команда запуска вашего кода должна выполняться в корневой директории репозитория, а следовательно важно правильно передать путь к файлу для чтения. Node.js, в случае передачи относительного пути к файлу вроде ./text.txt
будет искать его относительно директории в которой был запущен процесс. Функция join из модуля Path позволяет создать полный путь к текстовому файлу основываясь на переменной __dirname хранящей путь к каталогу, где находится файл вашего скрипта. Таким образом директория из которой вы запускаете код не повлияет на место поиска нужного файла и вы всегда будете ссылаться на text.txt лежащий рядом с index.js. Так же модуль Path содержит другие полезные функции для манипуляций с путями, а потому настоятельно рекомендую изучить его возможности.
У вас будет несколько вариантов для того, чтобы направить ваш поток чтения в поток стандартного вывода(то есть консоль. Больше о стандартных потоках можно узнать тут), Вы можете использовать как высокоуровневый console.log(), так и работать напрямую с потоком вывода process.stdout.
Обратите внимание, что переводы документации на русский язык могут быть устаревшими и не содержать всех современных возможностей модулей. Однако, основные концепции описанные там работают и по сей день. Для получения актуальной информации всегда используйте официальную документацию!
- События:
- Потоки:
- Модуль Path:
- Process: