Как стать автором
Обновить

Комментарии 12

НЛО прилетело и опубликовало эту надпись здесь
Казалось бы — статья про Node.js и streams. Почему для серверной платформы выбран пример с копированием локального файла? Ведь самый подходящий пример — это скачивание большого файла по http и сохранение его на диск с помощью стримов. Или наоборот — отдача локального файла по http. Сразу всем понятно, для чего это, какая от этого польза и новички могут даже скопипастить себе код в свой проект на экспрессе.
Этот пример проще самому протестировать у себя на компьютере, например. А адаптировать его для других целей не так уж и сложно.
Для русской аудитории данный вопрос уже давно прекрасно раскрыл Илья Кантор в своем скринкасте по Node.js (уроки 23-26).

Ожидал увидеть что-то другое, нежели о копировании файлов.
Ненавижу сайты где не пишут дату публикации, тут 2013 у меня минута целая ушла, чтобы найти, и учитывая что нода появилась в 2009, это для неё доисторический период.
Хоть бы была приписка о том, что пример синтетический, и копировать файлы таким образом нельзя ни в коем случае. А то ж код потащат в проекты…
Еще бы сноску добавить: «прежде чем писать свой велосипед, почитайте доку по работе nodejs там уже много чего есть»
nodejs.org/dist/latest-v11.x/docs/api/fs.html#fs_fs_copyfile_src_dest_flags_callback

может копировать откуда угодно и куда угодно

Справедливости ради, эта функция реализует весьма специфическую логику и подойдет не в каждой ситуации. Тут есть перевод эпичного чеклиста про копирование файла в общем случае https://m.habr.com/post/301924/.

Умнички, цепляться на реализацию копирования в статье про работу с памятью. Я поражаюсь людьми, которые даже не удосужились понять суть статьи, но зато свои 5 копеек обязательно вставить умудряются, профессионалы ведь, доку выучили, а там копирование по другому описано!
за реализацию никто не цепляется, просто люди насмотрятся такого, потом в реальные проекты без надобности тащат велосипеды, а потом приходишь на проект, а там ни доки, ни велосипедистов, и не понятно как это все работает, а писать свои велосипеды вместо тех решений которые предлагает сам язык (или система), по мне так не оправданное дело за исключением ситуации в комментарии выше :), пишите сразу уже на своем языке, зато доку не нужно будет учить
а почему 8.12, а не 10.12 или не 10.14.2 например?
Примеры кода не очень удачные для новичков, потому что содержат ошибки:

  • Неуместное использование this, как написано в комментарии выше
  •  
    this.fileArray = fileName.split('.');
        
    try {
        this.duplicate = destPath + "/" + this.fileArray[0] + '_Copy.' + this.fileArray[1];
    } catch(e) {
        console.exception('File name is invalid! please pass the proper one');
    }

    Если путь файла содержит больше одной точки или не содержит точек, то получится неожиданный результат. К тому же код в try никогда не выкинет исключение, поэтому код в блоке catch никогда не выполнится.
  •  
    let percentageCopied = ((chunk.length * this.counter) / this.fileSize) * 100;

    Вы уверены, что у всех чанков будет одинаковый размер? Лучше вместо счётчика чанков завести счётчик скопированных байт: проще и надёжнее.
  • В качестве решения предложен «волшебный» метод pipe без объяснения того, как он решает проблему. Стоило бы упомянуть pull-подход: не поток чтения читает данные и отправляет на запись, а поток записи «тянет» данные из потока чтения, когда завершил запись текущего блока данных. Этот подход можно реализовать без использования pipe и его следует всегда предпочитать push-подходу.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий