Типичные ошибки Node JS разработчиков

  Рет қаралды 11,892

PurpleSchool | Anton Larichev

PurpleSchool | Anton Larichev

Күн бұрын

Пікірлер: 112
@404piano
@404piano 2 жыл бұрын
Братан, хорош, давай-давай, вперёд! Контент вообще в кайф, красавчик! Можно вот этого и того, и почаще?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Конечно)
@AntonGorbachevDev
@AntonGorbachevDev 2 жыл бұрын
Фанаты экстрим кода и сюда добрались со своей пастой?)
@theban2517
@theban2517 2 жыл бұрын
Ты каналом ошибся)
@victormog
@victormog 2 жыл бұрын
За объяснения по _package-lock.json_ и _npm ci_ - отдельное спасибо!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@dmitrykanaev8315
@dmitrykanaev8315 2 жыл бұрын
Большое спасибо, очень годное видео! Антон, вы делаете очень большую и качественную работу, с нетерпением жду ваших новых видео и курсов!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@al77ex1
@al77ex1 2 жыл бұрын
Спасибо большое за видео! Правильные подскадзки, как раз то что нужно.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@СамирАбасов
@СамирАбасов 2 жыл бұрын
1. Спасибо за то что - когда говоришь надо писать на typescript объясняешь почему. Я уже давно слышу что надо переходить на typescript, но никто не объясняет зачем усложнять код, если обычны js работает. 2. Спасибо за адекватные цены на курсы!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@-EgoSerg-
@-EgoSerg- 2 жыл бұрын
Оооо супер. Можешь просвятить )) Возьмем пример. Есть форма, где пользователь вводит Страну и Город И у тебя есть функция, которая отсылает запрос на стороннее API И что ты сделаешь? Сделаешь два атрибута с типом строка? А валидацию не будешь делать данных от пользователе? Что если пользователь введет пустую строку, или на английском или на любом другом языке. А что если, такой страны или города не существует. А если город из другой страны? И как тут поможет ваш TS? Или вы создадите тип, где укажите все страны и все города? (и это на разных языках)
@СамирАбасов
@СамирАбасов 2 жыл бұрын
@@-EgoSerg- вообще если я не ошибаюсь то ts не для этого. 1.Для лучшего понимания кода 2.Чтобы не совершать ошибки, Благодаря тому что ты укажешь что это строки, ts не позволит использовать методы не предназначенные для строк, например 3.Дополнительные бонусы (в твоей ситуации backend с помощью class-transformer проверит чтобы строка была не пустая и строка была строкой). А соответствие значения надо проверять самому
@-EgoSerg-
@-EgoSerg- 2 жыл бұрын
@@СамирАбасов Что и требовалось доказать. Это защита от дурака
@shahid1508
@shahid1508 2 жыл бұрын
Да есть все и без тс, дефолтные значения, проверка типов, классы, декораторы, видимость, скоуп и тп, с текущим жс легко писать ооп подобно. Просто тс накидыаает более человеко понятное представление принятое плюс минус в других си подобных яп, вот и все сахар.
@ВадимЛипатов-ю4ь
@ВадимЛипатов-ю4ь 2 жыл бұрын
Всегда приятно Вас послушать, спасибо!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@petrvictorovich
@petrvictorovich 2 жыл бұрын
Хорошие видео! Очень мало контента с решением проблем РЕАЛЬНОЙ разработки.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@alien19981
@alien19981 2 жыл бұрын
У npm как я помню есть исключение именно для 0.X.Y версий, break changes в этом случае поднимают X, а минор и патчи Y. И вроде как ^ будет именно захватывать 0.21.1-0.21.N версии того же axios, а при релизе в 1.0.0 будет уже дефолтное поведение.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Возможно для 0 действительно
@AdamJohnson74
@AdamJohnson74 2 жыл бұрын
Не возможно, а так и есть
@БорисКрасных-ц8н
@БорисКрасных-ц8н 2 жыл бұрын
По-моему, отлично. И манера подачи устраивает.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@sengokusky1515
@sengokusky1515 2 жыл бұрын
Нужно больше Антона!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Стараюсь)
@19n1ght
@19n1ght 2 жыл бұрын
Насчет примера с callback. Для этого же есть utils.promisify. Вручную не нужно оборачивать :)
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Хорошее замечание!
@chikenmacnugget
@chikenmacnugget 2 жыл бұрын
Типичный инфоцыга. За 5 минут высрал видео про букварь не подумав и сидит с умным лицом говном обтекает
@predok_mif
@predok_mif Жыл бұрын
@@PurpleSchool плюс сама реализация не правильная, что нет reject и try/catch внутри. Да, с высоты опыта оно кажется очевидным, но видео предназначено для новичков, а они слепо копируют как видят. У ютюба есть возможность вставлять всплывашка в видео без перезалива. Может добавишь такое с пояснениями и ссылкой на доку и пример?
@yennms5547
@yennms5547 2 жыл бұрын
Спасибо, интересное видео!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@alexanonymous5823
@alexanonymous5823 2 жыл бұрын
спасибо большое, очень интересно. если есть возможность сделайте пожалуйста вторую часть где будет информация как избежать утечек памяти. В ноде огромная проблема с этим, наверное на 95% проэктов
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Хорошо, подумаю над этим)
@notsure8175
@notsure8175 2 жыл бұрын
А можно про Event Loop, но прям для взрослых?) Там микротаски, макротаски, тредпулы, итд, итп. А то везде только по верхам)
@PurpleSchool
@PurpleSchool 2 жыл бұрын
У меня в курсе по Node.js прям детально расписано: purpleschool.ru/course/nodejs Но может сделаю видео и сюда.
@ruslanglaznyov9117
@ruslanglaznyov9117 2 жыл бұрын
kzbin.info/www/bejne/bZeaaWqJqMyepKM Неплохой доклад как по мне
@ruslanglaznyov9117
@ruslanglaznyov9117 2 жыл бұрын
Все классно, но по поводу ts очень спорно. Ts код может стать очень грязным, если делаешь что-то сложное, потому что когда у тебя что-то становиться настолько обобщённым ты начинаешь программировать типы с дженериками, а не саму программу. Посмотреть те же типы в библиотеке knex и таких примеров много, а теперь представьте если бы эти типы были вместе с кодом, код был бы тяжело читаемым, это имхо конечно. К тому же не все конструкции на js можно выразить в ts, а это ограничивает. Так же у ts нет спецификации. Типы ts существуют только в рантайме. Конечно же типы нужны, так как на большом проекте сложно узнать что принимает и возвращает функция. Поэтому мне нравится подход когда мы пишем модуль, а рядом кладём файл d.ts в котором описываем типы. Затем можно в тестах из d.ts генерировать json schema и проверять типы(контракты непосредственно в рентайме). Преимущество данного подхода - Мы описываем контракты, а внутри функции/класса можем реализовывать все конструкции js, без ограничений ts. - не нужно ждать компиляции - с помощью тестов с json schema мы проверяем реальные типы. Даже на сайте ts сказано что их целью не является создать надёжные типы которые будут оказывать на возможные ошибки в компиляции, Аля rust. Их цель увеличить девелопер экспириенс, так смысл тогда использовать его, если можно делать тоже с d.ts и получать тот же экспириенс в виде подсказок в ide. Так делает команды node.js Вот ещё интересный доклад о том что ts может быть даже экономически не выгоден kzbin.info/www/bejne/fmqQd2urnbCAiM0
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо. Илья всегда ссылается на разработку под заказ, где экономится время. Дальше неважно как будут жить проекты. А для своих - поддержка будет крайне сложной. Что касается d.ts - они решают проблемы доков и подсказок. Но при рефакторинге большого проекта это не поможет. Да, TS для сложных случаев вносит дополнительный overhead, но проще иногда для этих случаев сделать any и договорится что опускаем сложность. Но при этом мы сможем пользоваться всеми преимуществами и не делать костыли.
@theoty-js
@theoty-js 2 жыл бұрын
Супер доклад
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@vladpestsov3719
@vladpestsov3719 2 жыл бұрын
Было бы круто про использование socketio с nodejs. Может есть такое в планах?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Рассмотрю как вариант
@petrpechkurov3095
@petrpechkurov3095 2 жыл бұрын
Антон, спасибо за видео! Про package-lock уже было в видео с интервью, благодарю за отдельное рассмотрение этого момента. Как раз сейчас на проекте этот файл в гитигноре :) Вопрос не по теме: почему используешь vim, а не neovim?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Рад, что было полезно!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
На самом деле и то и то. Там конфиг одинаков
@sleepyg11
@sleepyg11 2 жыл бұрын
Очень интересное решение в async функции делать return new Promise(), когда функция сама заворачивается в промис автоматически. И также странный выбор использовать switch case для отображения нужного символа погоды вместо обычного объекта.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
1. Тебе нужно в правильный момент вызвать resolve / reject, не очень ясно как ты это собрался делать? 2. Это учебный проект, который делается для начинающих разработчиков. Можно делать и объект, можно и Map. Вопрос простого изучения студентами.
@sleepyg11
@sleepyg11 2 жыл бұрын
@@PurpleSchool async функция воспринимает return в своём блоке видимости как resolve, а throw соответственно как reject, тем самым не обязательно создавать промис внутри неё. Явное создание промиса может быть полезно когда идёт работа с каллбеками, которые нужно заворачивать, хотя в большинстве своя utils.promisify решает такую задачу для большей части стандартных случаев.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Верно, мы как раз в примере оборачиваем функцию с callback. Именно поэтому используется конструкция new Promise
@alexanders.3011
@alexanders.3011 2 жыл бұрын
По поводу тайпскрипта слышал что есть такая практика, когда рядом с js файлом кладут ts файл где описуют типы, мол так эффективней 🤷🏻‍♂️ Есть в этом резон или просто писать на тайпскрипте и не заморачиваться?)
@notsure8175
@notsure8175 2 жыл бұрын
у Тимура слышал?)
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Проще писать на ts. Зачем делать костыли, класть d.ts и не получать в всех преимуществ, если можно просто писать на TS. Он не сложен и даёт множество бонусов.
@2cssTV
@2cssTV 2 жыл бұрын
А в чем эффективность, если он по итогу в js транспилируется?
@alexanders.3011
@alexanders.3011 2 жыл бұрын
@@notsure8175 Ага)
@alexanders.3011
@alexanders.3011 2 жыл бұрын
@@PurpleSchool Ясно, спасибо за ответ)
@bubblesort6368
@bubblesort6368 2 жыл бұрын
Typescript это конечно хорошо, но хотелось бы чтобы все ещё напоминали что обмазывать юнионами пиками и омитами весь код тоже плохо, потому что аннотации типов становяться сложнее самого кода. Это часто удручает(
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Это верно. Иногда код типов TS слишком усложняется. Тогда надо дробить типы или иногда даже опускать их.
@arsen_arakelian_1
@arsen_arakelian_1 2 жыл бұрын
мне кажется стоило назвать видео типичные ошибки начинающих Node.js разработчиков, потому что ошибки приведены вполне банальные и обычно jun dev через пол года коммерции, все их умеет избегать.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Часть ошибок встречается не только у джунов. Но в целом да.
@suslikest3708
@suslikest3708 2 жыл бұрын
Интересно было бы посмотреть тему с миграциями, например на Sequelize как там все эти связи многие ко многим и тп работают больно уж после фронта тяжко идет тема, хотя идея понятна)
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Ок) видео по Prisma думаю сделаю
@antnzr656
@antnzr656 2 жыл бұрын
@@PurpleSchool typeorm 0.3 версию в nest подтянули. Почему Prisma?
@petrplotnikov4307
@petrplotnikov4307 2 жыл бұрын
у меня как у новичка вопрос.. если мы использовали старую версию аксиса, а потом он обновился.. он же стал лучше.. а наше приложение устареет .. и что, оно 10 лет будет на старой версии работать?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Ты совершенно прав, что обновлять зависимости надо. Тут вопрос осознанности обновления. Если ты пришёлся, поднял версии и все протестировал - молодец. А если он сам без твоего ведома при сборке понял версию - это уже проблема.
@alexanderbolshakov5915
@alexanderbolshakov5915 2 жыл бұрын
Вместо ручной промисификации библиотечных функций лучше использовать из библиотеки node utils promisify.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Да, хороший способ.
@ДмитрийКарпич
@ДмитрийКарпич 2 жыл бұрын
Ну, Sync функции не так ужасны, зависит от того где используется. Например на старте сервера мы читаем конфиг - так один чёрт делать ничего нельзя пока его не прочитали - делаем Sync и не усложняем сущности сверх необходимого.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Верно, при таком использовании они подходят.
@surenmatinyan5386
@surenmatinyan5386 2 жыл бұрын
Можно вместо new Promise использвать promisify!!
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Верно)
@alexmitelman6145
@alexmitelman6145 2 жыл бұрын
const util = require('util'); const func = () => { /* do something */ }; const callbackPromisified = util.promisify(func);
@ПавелШлыков-м4ч
@ПавелШлыков-м4ч Жыл бұрын
Ну такое себе заявление про Typescript, я думаю в первую очередь порог входа будет регулироваться архитектурой, структурой и количеством мусора на проекте. В проектах с TS может черт ногу свернуть когда люди не понимают зачем он им толком нужен и как правильно им пользоваться. Можно наплодить в 3 раза больше типов чем требуется и запутаться на ровном месте. Ну уж очень внушительным должен быть проект чтобы была польза от Typescript (при условии что он верно используется).
@dmitriy8735
@dmitriy8735 2 жыл бұрын
Норм советы
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Спасибо!
@ilyasdautov6218
@ilyasdautov6218 2 жыл бұрын
очень удивлен, что кто-то package-lock игнорит, когда после npm i в консоли выводится, что он должен быть закоммичен =)
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Верно) но очень часто вижу такую ошибку.
@nurlankazdayev4487
@nurlankazdayev4487 2 жыл бұрын
Почему fs а не node:fs ?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Это одно и тоже, просто второе - это обращение в обход кэша require
@nurlankazdayev4487
@nurlankazdayev4487 2 жыл бұрын
@@PurpleSchool Спс!
@keksinjo
@keksinjo 2 жыл бұрын
Про колбэки и промисы в ноде это не вариант, в большинстве случаев лучше стрим делать
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Стримы действительно лучше, но для простых случаев удобнее promise.
@keksinjo
@keksinjo 2 жыл бұрын
@@PurpleSchool с промисами тогда можно использовать promisify из модуля util, если колбек в лучших практиках error-first, то будет посимпатичнее
@SFUStudent
@SFUStudent 2 жыл бұрын
Ошибка многих джавастриптизеров: возвращать промис не поставив перед ним await
@PurpleSchool
@PurpleSchool 2 жыл бұрын
return await нужно писать только в одном случае - если ты хочешь поймать исключение в той же функции. В остальных случаях это фактически дополнительный await. Подробнее в статье: purpleschool.ru/blog/return-await
@vovasvidinsky1369
@vovasvidinsky1369 2 жыл бұрын
Na Udemy kurs stoit 100$ 🤑, mojno skidku?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Лови скидочные купоны на мои курсы: t.me/purple_code_channel/155
@just__did__it
@just__did__it 2 жыл бұрын
Что за редактор и тема?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
NVIM - тема github.com/yassinebridi/vim-purpura
@НикитаИшков-в3к
@НикитаИшков-в3к 2 жыл бұрын
Callback hell в 2022!? ЧОООО?
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Да, да и не такое можно увидеть.
@СергейКурганов-о2э
@СергейКурганов-о2э 2 жыл бұрын
JS без TS это как спичкой в кале ковыряться выбирая, что сдать на анализ.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
😂
@chikenmacnugget
@chikenmacnugget 2 жыл бұрын
Видос говно. Ошибки из разряда "одевай одинаковые носки в детский сад". А по поводу тс, очень спорное заявление, хотя если ты с умным лицом такие вещи затираешь, то для тебя наверное это спасательный круг.
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Если говно - можно было пропустить и даже не тратить время на комментарий. А про TS - тут можно не спорить, любой большой проект без него обречён на невозможность рефакторинга, поддержки длительный период и развития. На JS можно только на коленке писать проекты.
@chikenmacnugget
@chikenmacnugget 2 жыл бұрын
@@PurpleSchool с чего ты вывод то такой сделал? Если ты делаешь говно, то тебе говорить об этом не надо? А ну да, лучше в своем "маня" мирке капашиться. Тебе даже указали почему твой контент говно, а если ты это принять не можешь, то ты слабый. Или может тебе еще план подробный составить о том, что поправить? Ты развиваться не хочешь, ты женщина, то есть слабый. Твои заявления про ТС - это популистский спич. Любому адекватному разработчику понятно, что в первую очередь нужно в архитектуре понимать и паттернами/практиками владеть, а не отдавать все на откуп какой-то тулзы, которая сама океан проблем имеет. Если так голословно заявляешь, то сворачивай ноду, разворачивай джаву, шарп, го, элексир и т.д. А подождите там тоже можно говно неподдерживаемое написать. Регуляр инфоцыга. Владилен на минималках.
@ruslanglaznyov9117
@ruslanglaznyov9117 2 жыл бұрын
@@PurpleSchool GitHub, gitlab, Netflix, без тайпскрипта. Нужно было бы лучше упомянуть важность тестов, потому что у команды тс нет цели создать надежных типов, они сами это пишут. А значит когда твой код скомпилировался у тебя ложное мнение что все работает, но это не так особенно для ts
@PurpleSchool
@PurpleSchool 2 жыл бұрын
@@ruslanglaznyov9117 это полностью поддержу, так как без тестов писать код плохо. Даже если у тебя TS - тесты обязательны. TS позволяет избавиться только от части ошибок.
@bubblesort6368
@bubblesort6368 2 жыл бұрын
Лишь бы какашками оббросать... Вы же должны понимать, что это смотрят люди разное уровня и для кого-то это откровение?)
@old-cake-warden
@old-cake-warden 2 жыл бұрын
Вот это типичные ошибки? "Используйте TS, пишите асинхронный код, не пишите гавно". Это видео - потеря времени, как и большинство материала в интернете. Гоняют одну и ту же информацию, да ладно бы умную. Смотрите девшахту, тогда уж. Парень молодец, видео гавно
@xeleos
@xeleos 2 жыл бұрын
Про TS спорно. Долгая компиляция может быть проблемой. Вместо использования TS можно писать .dts файлы. Подробнее говорил создатель nodejs в интервью у бороды.
@luckytima2315
@luckytima2315 2 жыл бұрын
Райан Даль (Ryan Dahl) - основатель Node.js. Что то я не видел его у Лекса на интервью хаха
@PurpleSchool
@PurpleSchool 2 жыл бұрын
А на каком моменте может быть проблемой? Сборка для прода - ожидание дополнительных 5 секунд. При локальной работе сборщики уже сильно оптимизированы и пересобирается только изменённый кусок. И даже JS мы собираем для фронта и тратим на это время и ресурсы. А писать d.ts - время траться а полной пользы от TS нет. Если уже писать типизировано, то только TS. Я ни разу не натыкался на проблемы из-за долгой компиляции.
@bubblesort6368
@bubblesort6368 2 жыл бұрын
Ну может в java сборка проектов по 20 минут и проблема, но чтот ни разу не видел чтоб так долго компилился ts) это секунды в любом проекте...
@виртуоз_ру
@виртуоз_ру Жыл бұрын
Хорош 👍
@PurpleSchool
@PurpleSchool Жыл бұрын
Спасибо!
@-EgoSerg-
@-EgoSerg- 2 жыл бұрын
Боже.... Просто тупо инфо циган. 1. Пример с промисами. Продолжает использовать колбек, но только завернул это еще в промисы. )) 2. По поводу TS. В примере, ты юзаешь стороннее API. И то что ты напишешь типа для данных и не пойдешь и не перепроверишь, что принимает API. Вот за это нужно бить по рукам. А что если API изменит данные. Раньше они принимали код страны, а потом стали принимать ID ты не будешь смотреть, что там и как работает? Ты будешь надеяться на свой TS? 3. Относитель npm ci Аррргггг. Ну если человеку сложно, прочитать что и как работает. Может ему не стоит программировать. Если обьяснять просто азы )) Все ясно с тобой
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Обожаю таких экспертов)
@-EgoSerg-
@-EgoSerg- 2 жыл бұрын
​@@PurpleSchool Ну конечно )) Ты ведь эксперт )))) После твоего коммента, все стало ясно и понятно )) Ты и на своих курсах такую воду льешь? Хотя, что там говорить. Есть такая поговорка. Кто умеет работать, тот работает. Кто не умеет работать, тот преподает
@PurpleSchool
@PurpleSchool 2 жыл бұрын
Я же все сказал в видео: 1. Я говорил что некоторые библиотеки не поддерживают Promise и как это решить. Твой комментарий не по теме. 2. Задача TS не проверять данные от API, а задавать структуру. Проверяет разработчик логиков в коде. 3. Как и сказал в видео, это частая ошибка, потому и обратил внимание. Посмотри на канале собеседование backend, где он не знал что это такое.
Nestjs - быстрый курс по лучшему  Node js фреймворку
52:33
PurpleSchool | Anton Larichev
Рет қаралды 67 М.
Ищем проблемные места в node.js-приложениях
17:08
devschacht “Девшахта”
Рет қаралды 11 М.
“Don’t stop the chances.”
00:44
ISSEI / いっせい
Рет қаралды 62 МЛН
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
VIP ACCESS
00:47
Natan por Aí
Рет қаралды 30 МЛН
Не делайте так в React!
14:21
PurpleSchool | Anton Larichev
Рет қаралды 14 М.
Обзор Nestjs - лучший framework на Node.js и TypeScript
17:14
PurpleSchool | Anton Larichev
Рет қаралды 37 М.
Уничтожаю Node.js
8:20
ExtremeCode
Рет қаралды 191 М.
Что такое Git flow и когда использовать?
11:44
PurpleSchool | Anton Larichev
Рет қаралды 70 М.
“Don’t stop the chances.”
00:44
ISSEI / いっせい
Рет қаралды 62 МЛН