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...

ความคิดเห็น • 69

  • @flepjack
    @flepjack ปีที่แล้ว +5

    Друг, спасибо тебе за это видео. Это самое понятное объяснение, какое только может быть. Пересматриваю его каждые +- пол года, когда работаю со стримами, и каждый раз ставлю лайк, который уже стоит👍

  • @daymaker_bybit
    @daymaker_bybit 2 ปีที่แล้ว +2

    Очень хороший урок. Спасибо!

  • @user-ox4yl6gu3u
    @user-ox4yl6gu3u 2 ปีที่แล้ว +3

    Мои поздравления! Вы наконец подобрали идеальную скорость подачи информации!

  • @LexasBY
    @LexasBY 2 ปีที่แล้ว +2

    Спасибо большое за видосы! Ну просто очень своевременно! Сам сейчас в лабе и как раз вчера срез по Buffer & Streams сдал! ))

  • @bahlulhasanli
    @bahlulhasanli 2 ปีที่แล้ว +1

    The video was awesome. You explained it well with examples.

  • @An-cq6jx
    @An-cq6jx ปีที่แล้ว

    Чувак ты просто супер молодец! Как понятно все объяснил, таких мало в рунете. Огромное тебе спасибо, снимаю шляпу!

  • @qlmanlp
    @qlmanlp ปีที่แล้ว

    Благодарю, очень доходчиво и понятно стало

  • @frekbysib
    @frekbysib ปีที่แล้ว

    Спасибо. Годное обучение

  • @AidosOmurzakov
    @AidosOmurzakov 10 หลายเดือนก่อน

    Объяснил чётко спасибо

  • @dimalukashenko4865
    @dimalukashenko4865 2 ปีที่แล้ว

    Отличное видео!

  • @ruslan_lwow79
    @ruslan_lwow79 2 ปีที่แล้ว

    Дякую , курси чіткі!

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 ปีที่แล้ว

      Спасибо большое за отзыв

  • @RisDeep
    @RisDeep 2 ปีที่แล้ว +13

    Спасибо. Было бы круто если бы было ещё больше реальных примеров использования с кодом

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 ปีที่แล้ว +3

      Во второй части курса будет больше практики

    • @vasiuta
      @vasiuta ปีที่แล้ว

      @@YauhenKavalchuk Вторая часть еще только в планах?

    • @user-ny3fg6vl6h
      @user-ny3fg6vl6h ปีที่แล้ว

      @@vasiuta тоже цікавить

  • @ridl27
    @ridl27 2 ปีที่แล้ว

    нормас, а с 2х ваще то что нужно! спс! и да, первый :D!

  • @vasylp.4007
    @vasylp.4007 2 ปีที่แล้ว +1

    лайк этому видео, еще до просмотра...))

  • @user-ur4ev7vl6c
    @user-ur4ev7vl6c 2 ปีที่แล้ว +1

    Теперь за собес можно и не бояться))

  • @obivanbeluii
    @obivanbeluii 2 ปีที่แล้ว

    👍👍👍

  • @user-et6hy7ix2t
    @user-et6hy7ix2t 2 ปีที่แล้ว +1

    Супер понятно. Хотелось бы еще узнать как дописывать данные в файл, не пересоздавая его каждый раз при получении новой порции данных.

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 ปีที่แล้ว

      Не уверен что такое можно сделать нативно, возможно понадобится дополнительный npm

  • @gyros9162
    @gyros9162 2 ปีที่แล้ว

    Спасибо! Было бы классно услышать от вас про работу с потоками в циклах.
    Например, когда нам нужно из нескольких файлов записать данные в один файл (стили, например)

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 ปีที่แล้ว

      Спасибо за отзыв. Но курс закончен, не думаю что буду дополнять его новыми лекциями

    • @amelianceskymusic
      @amelianceskymusic 2 ปีที่แล้ว

      ​@@YauhenKavalchuk Жаль, я тоже уже обыскался подобного материала, перенести данные из одного файла в другой могу и вроде все корректно, но стримы как буд то делают это параллельно, и никак не получается после каждого отдельного этапа чтение/запись добаить что -то по типу:
      Файл 1 открылся
      Файл 1 записался
      Файл 2 открылся
      Файл 2 записался
      Файл 3 открылся
      Файл 3 записался
      Получается только:
      Файл 1 открылся
      Файл 2 открылся
      Файл 3 открылся
      Файл 1 записался
      Файл 2 записался
      Файл 3 записался

  • @mikitanikolaev9212
    @mikitanikolaev9212 2 ปีที่แล้ว +3

    Спасибо за видос. Но хочу обратить внимание на пару моментов.
    Чанк не обязательно должен быть буфером, можно в base64 кодировать. Буфер это просто бинарное представление данных в node.js. Stream в Nodejs !== Stream в HTTP. Стрим в ноде это просто класс предоставляющий возможность читать и писать почанково, а в HTTP нету стандарта, каждый свой придумывают как передавать почастям данные.

  • @user-xj5is7uv2d
    @user-xj5is7uv2d 8 หลายเดือนก่อน

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

  • @rayetzki
    @rayetzki 2 ปีที่แล้ว +2

    Для обработки ошибок лучше использовать pipeline из того же пакета, , а не pipe, по-моему начиная с 12 Ноды доступен. У pipe есть утечки памяти при ошибках во время исполнения

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 ปีที่แล้ว

      Спасибо за подсказку

  • @AAndreev1983
    @AAndreev1983 3 หลายเดือนก่อน

    а что запускает чтение файла? В прошлом уроке было this.emit и это был вызов события и далее уже срабатывал logger.on. Тут же мы создаем поток чтения и назначаем его в переменную и тут же срабатывает readStream.on.... readStream это же прослушиватель? что его активирует, почему нет чтото вроде readStream.emit чтобы запустить чтение потока?

  • @stasostrin47
    @stasostrin47 2 ปีที่แล้ว

    Про CORS будет информация?)

  • @VladislavSnegurov
    @VladislavSnegurov ปีที่แล้ว

    На сколько я понимаю, пайп это не дуплексный поток чтения. Может в качестве абстракции для новичков, таковым его и можно считать, но как по мне это только больше вводит в заблуждение. По дуплексному каналу обе стороны могут одновременно читать и писать. В случае же с пайпом - это вектор в котором одно сторона постоянно пишет, а вторая может только читать. Это наглядно видно на примере с bash пайпами, где для дуплексного чтения есть специальные "named pipes"

  • @elconrel9665
    @elconrel9665 ปีที่แล้ว

    Подскажите, после прохождения данного курса можно считать свои знания по ноде базовыми ?

  • @ylvpro6878
    @ylvpro6878 2 ปีที่แล้ว +1

    А где вы изучили node.js?

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 ปีที่แล้ว +1

      По таким же курсам, статьям, документацию листал

    • @ylvpro6878
      @ylvpro6878 2 ปีที่แล้ว +1

      @@YauhenKavalchuk понял, большое спасибо

  • @rakhymbeksagyn2835
    @rakhymbeksagyn2835 2 ปีที่แล้ว

    модуль "util" оказывается устарел (deprecated). Классический вариант "extends" лучше использовать. ES6

  • @akuma8865
    @akuma8865 2 ปีที่แล้ว

    Подскажите пожалуйста почему handleError вызывается дважды но срабатывает единожды?

    • @YauhenKavalchuk
      @YauhenKavalchuk  2 ปีที่แล้ว +1

      Потому что как только он падает в первом случае, выполнение останавливается. Поэтому второй и не вызывается

    • @platinum356
      @platinum356 ปีที่แล้ว

      Нет смысла вешать обработчик события error дважды. Автор ошибся, сказав, что обработчик имеет смысл до pipe и после. Независимо от того, перед или после пайпа вы повесили обработчик ошибки, он вызовется.

  • @dec232
    @dec232 ปีที่แล้ว

    Из-за чего может не сжиматься файл? Все вроде точно повторил, а созданный файл остается не сжатым.

    • @YauhenKavalchuk
      @YauhenKavalchuk  ปีที่แล้ว

      Сверьте с кодом из репозитория

  • @kr4chinin771
    @kr4chinin771 2 ปีที่แล้ว +1

    Распаковать данные из последнего примера можно с помощью создания потока const decompressStream = zlib.createGunzip().
    Нужно создать читающий поток из файла со сжатыми данными (const decompressReadStream = fs.createReadStream("директория-файла-со-сжатыми-данными")) и создать новый записывающий поток (const decompressWriteStream = fs.createWriteStream("директория-файла-для-записи-распакованных-данных")), далее с помощью схожей цепной структуры можно сначала распаковывать данные, а затем записать их в новый файл:
    decompressReadStream
    .pipe(decompressStream)
    .pipe(decompressWriteStream)
    На выходе получим распакованные данные в новом . txt файле (если захотите повторить этот код - лучше вынести его в чистый .js файл)