Node.js #6 Буфер и потоки (Buffer & Streams)
ฝัง
- เผยแพร่เมื่อ 26 ก.ค. 2021
- #YauhenK #webdev #Node #Express
Всех приветствую в курсе «Node.js».
В данном видеокурсе мы с вами рассмотрим Node.js, серверную технологию которая позволяет исполнять код написанный на JavaScript вне браузера. Разберём базовые концепции и встроенные модули, которые активно используются при разработке сервера. Рассмотрим механизм коммуникаций между сервером и браузером. Создадим базовый роутинг на чистом Node.js. Подключем Express и перепишем роутер. Научимся работать с динамичными данными с помощью шаблонизатора Node.js. Напишем новостное приложение с поддержкой CRUD операций и хранением данных в MongoDB. Создадим свой API по возврату данных из БД. И в заключение, загрузим готовое приложение на Heroku.
✒ Репозиторий курса:
✔ GitHub: github.com/YauhenKavalchuk/no...
✒ Полный список готовых и планируемых курсов:
✔ Trello: trello.com/b/R6rD7qq8
✒ Автор курса:
✔ TH-cam: / yauhenkavalchuk
✔ Instagram: / yauhenkavalchuk
✔ Twitter: / yauhenkavalchuk
✔ VK: YauhenKavalchuk
✔ LinkedIn: / yauhenkavalchuk
✔ GitHub: github.com/YauhenKavalchuk
✔ VK (Группа): webdevcom
✒ Поддержать развитие канала: github.com/YauhenKavalchuk/yo...
Друг, спасибо тебе за это видео. Это самое понятное объяснение, какое только может быть. Пересматриваю его каждые +- пол года, когда работаю со стримами, и каждый раз ставлю лайк, который уже стоит👍
Спасибо за отзыв
Очень хороший урок. Спасибо!
Пожалуйста)
Мои поздравления! Вы наконец подобрали идеальную скорость подачи информации!
Спасибо
Спасибо большое за видосы! Ну просто очень своевременно! Сам сейчас в лабе и как раз вчера срез по Buffer & Streams сдал! ))
👍 Пожалуйста
The video was awesome. You explained it well with examples.
Thanks!
Чувак ты просто супер молодец! Как понятно все объяснил, таких мало в рунете. Огромное тебе спасибо, снимаю шляпу!
Спасибо за отзыв
Благодарю, очень доходчиво и понятно стало
Пожалуйста
Спасибо. Годное обучение
Пожалуйста
Объяснил чётко спасибо
Пожалуйста
Отличное видео!
Спасибо за отзыв
Дякую , курси чіткі!
Спасибо большое за отзыв
Спасибо. Было бы круто если бы было ещё больше реальных примеров использования с кодом
Во второй части курса будет больше практики
@@YauhenKavalchuk Вторая часть еще только в планах?
@@vasiuta тоже цікавить
нормас, а с 2х ваще то что нужно! спс! и да, первый :D!
Пожалуйста
лайк этому видео, еще до просмотра...))
Благодарю)
Теперь за собес можно и не бояться))
👍
👍👍👍
👍
Супер понятно. Хотелось бы еще узнать как дописывать данные в файл, не пересоздавая его каждый раз при получении новой порции данных.
Не уверен что такое можно сделать нативно, возможно понадобится дополнительный npm
Спасибо! Было бы классно услышать от вас про работу с потоками в циклах.
Например, когда нам нужно из нескольких файлов записать данные в один файл (стили, например)
Спасибо за отзыв. Но курс закончен, не думаю что буду дополнять его новыми лекциями
@@YauhenKavalchuk Жаль, я тоже уже обыскался подобного материала, перенести данные из одного файла в другой могу и вроде все корректно, но стримы как буд то делают это параллельно, и никак не получается после каждого отдельного этапа чтение/запись добаить что -то по типу:
Файл 1 открылся
Файл 1 записался
Файл 2 открылся
Файл 2 записался
Файл 3 открылся
Файл 3 записался
Получается только:
Файл 1 открылся
Файл 2 открылся
Файл 3 открылся
Файл 1 записался
Файл 2 записался
Файл 3 записался
Спасибо за видос. Но хочу обратить внимание на пару моментов.
Чанк не обязательно должен быть буфером, можно в base64 кодировать. Буфер это просто бинарное представление данных в node.js. Stream в Nodejs !== Stream в HTTP. Стрим в ноде это просто класс предоставляющий возможность читать и писать почанково, а в HTTP нету стандарта, каждый свой придумывают как передавать почастям данные.
👍
значит сжатый файл, который будет отправлятся юзеру, будет автоматический конвертирован в читательный текст или его нужно конвертировать самостаятельно
Для обработки ошибок лучше использовать pipeline из того же пакета, , а не pipe, по-моему начиная с 12 Ноды доступен. У pipe есть утечки памяти при ошибках во время исполнения
Спасибо за подсказку
а что запускает чтение файла? В прошлом уроке было this.emit и это был вызов события и далее уже срабатывал logger.on. Тут же мы создаем поток чтения и назначаем его в переменную и тут же срабатывает readStream.on.... readStream это же прослушиватель? что его активирует, почему нет чтото вроде readStream.emit чтобы запустить чтение потока?
Про CORS будет информация?)
Нет
На сколько я понимаю, пайп это не дуплексный поток чтения. Может в качестве абстракции для новичков, таковым его и можно считать, но как по мне это только больше вводит в заблуждение. По дуплексному каналу обе стороны могут одновременно читать и писать. В случае же с пайпом - это вектор в котором одно сторона постоянно пишет, а вторая может только читать. Это наглядно видно на примере с bash пайпами, где для дуплексного чтения есть специальные "named pipes"
Подскажите, после прохождения данного курса можно считать свои знания по ноде базовыми ?
Можно
@@YauhenKavalchuk благодарю
А где вы изучили node.js?
По таким же курсам, статьям, документацию листал
@@YauhenKavalchuk понял, большое спасибо
модуль "util" оказывается устарел (deprecated). Классический вариант "extends" лучше использовать. ES6
👍
Подскажите пожалуйста почему handleError вызывается дважды но срабатывает единожды?
Потому что как только он падает в первом случае, выполнение останавливается. Поэтому второй и не вызывается
Нет смысла вешать обработчик события error дважды. Автор ошибся, сказав, что обработчик имеет смысл до pipe и после. Независимо от того, перед или после пайпа вы повесили обработчик ошибки, он вызовется.
Из-за чего может не сжиматься файл? Все вроде точно повторил, а созданный файл остается не сжатым.
Сверьте с кодом из репозитория
Распаковать данные из последнего примера можно с помощью создания потока const decompressStream = zlib.createGunzip().
Нужно создать читающий поток из файла со сжатыми данными (const decompressReadStream = fs.createReadStream("директория-файла-со-сжатыми-данными")) и создать новый записывающий поток (const decompressWriteStream = fs.createWriteStream("директория-файла-для-записи-распакованных-данных")), далее с помощью схожей цепной структуры можно сначала распаковывать данные, а затем записать их в новый файл:
decompressReadStream
.pipe(decompressStream)
.pipe(decompressWriteStream)
На выходе получим распакованные данные в новом . txt файле (если захотите повторить этот код - лучше вынести его в чистый .js файл)
👍