Comments 12
Казалось бы — статья про Node.js и streams. Почему для серверной платформы выбран пример с копированием локального файла? Ведь самый подходящий пример — это скачивание большого файла по http и сохранение его на диск с помощью стримов. Или наоборот — отдача локального файла по http. Сразу всем понятно, для чего это, какая от этого польза и новички могут даже скопипастить себе код в свой проект на экспрессе.
Для русской аудитории данный вопрос уже давно прекрасно раскрыл Илья Кантор в своем скринкасте по Node.js (уроки 23-26).
Ожидал увидеть что-то другое, нежели о копировании файлов.
Ожидал увидеть что-то другое, нежели о копировании файлов.
Хоть бы была приписка о том, что пример синтетический, и копировать файлы таким образом нельзя ни в коем случае. А то ж код потащат в проекты…
Еще бы сноску добавить: «прежде чем писать свой велосипед, почитайте доку по работе nodejs там уже много чего есть»
nodejs.org/dist/latest-v11.x/docs/api/fs.html#fs_fs_copyfile_src_dest_flags_callback
может копировать откуда угодно и куда угодно
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-подходу.
Sign up to leave a comment.
Эффективная работа с памятью в Node.js