Node.js Recipes
3.23K subscribers
173 photos
7 videos
1 file
610 links
Download Telegram
Здравствуйте, друзья!

Хочу пригласить вас на доклад, о перспективном node.js фреймворке NestJS. А расскажет нам о нем Никита Галкин - человек, который знает очень много о бекенде на node.js и охотно делится с миром своими знаниями!

Никита ведет telegram канал - @node_recipes, подписывайтесь и вы найдете большое количество качественных материалов о node.js.

Подробности доклада и регистрация - https://mathrandom.com/webinar01072021

Дата: 1 июля 18:00

#nodejs #nestjs #event #stream #nikitagalkin
NestJS. When patterns matters
#worth_seeing #nestjs

Сегодня у нас доклад с VinnytsiaJS 2017, которое можно назвать обзорным. 4 года назад я смотрел его, когда у Nest.js не было так подробно расписана документация, не было комьюнити. Для кого это тот доклад стал толчком к изучению всего Nest.js стэка.

Зрелость технологии определяется ее стабильностью. Может считать это видео подтверждением, что Nest.js стабилен и его стоит использовать.
Как работает query в REST?
#architecture #nestjs

Вопрос с собеседований: "Чему равно id во время выполнения такого запроса:?id=1&id=2"

Какой ответ дадите вы?
- будет ошибка, нельзя использовать два раза один параметр
- 1, потому что first win
- 2, потому что last win
- [1, 2]

В списке нет правильного ответа. Согласно спецификации это должен быть массив, но массив строк, а не чисел. Приведение типов это не часть парсинга строки.

Для передачи массива параметров в query есть такие варианты:
1️⃣?foo=bar&foo=qux
2️⃣?foo[]=bar&foo[]=qux
3️⃣?foo%5B%5D=bar&foo%5B%5D=qux
4️⃣?foo=bar,qux

Какой способ выбрать зависит от того какой framework или библиотеку вы используете. Для #nodejs разработчики использующих express ближе всего будет 2-й способ. По умолчанию express используют extended query parser, то есть использует qs. Эта библиотека учитывает [] при парсинге.
Закончил доклад в рамках @mathrandomcommunity:
Deep Dive Into NestJS

Кому нужны слайды, то они тут
Буду отвечать на ваши вопросы в комментариях как на ютубе, так и тут.
#nestjs
👍1
Stream-oriented Architecture with Nest
#worth_seeing #nestjs

Докладчик – Kamil Myśliwiec, создатель Nest.js. В докладе идет речь не об #nodejs Streams, а об архитектуре реактивного приложения. Для людей ранее не работавших с реактивностью рекомендую посмотреть обзор RxJS.

В ходе доклада Камиль на пример игры сравнивает layered и stream-oriented архитектуры. Это позволяет лучше понять концепт.

Слайды
Топ 10 ошибок в Nest.js проектах.
#nestjs

У Nest.js отличная документация, понятная архитектура кода и декларативных подход. Это позволяет начинать писать реальный код разработчикам переходящих в #nodejs с других языков. Приведу список типичных ошибок на уровне кода. Сокращение MS обозначает microservices.

1. Забыть добавить enableShutdownHooks, поэтому приложение не может корректно завершать свою работу.
2. Использование Hybrid application (http + ms) вместо разделения по процессам. В результате возникают проблемы в фильтрах ошибок.
3. Выкидывание наследников HttpException в MS. Аналогично в другую сторону. А добавьте сюда еще GraphQL/WS/custom контексты. В результате трансформация ошибок происходит не правильно.
4. Смешание входящих и исходящих DTO и/или моделей data-layer. В результате код получается короче, но сильнее связанный.
5. Наличие только одного уровня тестов из unit/e2e пары. В результате тестировать сложнее.
6. Не понимание работы export/import Nest.js модулей и провайдеров. В результате происходят ошибки в DI.
7. Не использование custom decorator-в и pipe. В результате код теряет свою декларативность.
8. Расширение сторонних интерфейсов (например Request) в ts, а не d.ts файле. В результате какой-то из процессов не делает его import.
9. Цикличные связи без forwardRef. В результате код просто не стартует.
10. Отсутствие логирования (в том числе запросов в БД). В результате troubleshooting очень затруднен.

В завершение скажу, что ошибки на уровне проектирования и архитектуры приложения проектозависимы.
TypeStack и NestJS
#nestjs

Сегодня обзор новостей по TypeStack. Описание этого стэка говорит само за себя: Decorator based frameworks and libraries for Node and browser. Он важен для NestJS комьюнити: routing-controllers – вдохновитель NestJS, а class-validator/class-transformer входят в NestJS стэк.

Стоить отметить две проблемы class-validator/class-transformer, во-первых их редко обновляют – нет маинтейнеров, во-вторых имеют версии 0.*. Это означает возможность breaking changes между минорными релизами. Позиция Камиля, создателя NestJS, по этому поводу была я не вижу значительных проблем.

А теперь хроника событий:
12 октября выявленная security issue в class-validator
– фикса нет вплоть до 28 октября, поэтому Камиль делает форк, который можно установить как @nestjs/class-validator. Аналогичные форк есть и для class-transformer.
– 20 ноября наконец-то выходят фиксы, но с брейкинг чеджами.
– команда NestJS рассматривает переход на форки в рамках 9 версии, которая не известна когда будет.

Какие выводы из этой истории:
– Во-первых, обновите пакет если вы еще этого не сделали
– Во-вторых, используйте в CI/CD npm audit, чтобы знать о проблемах сразу
– Во-третьих, проверьте может ли ваш код перейти на @nestjs/class-validator, как более поддерживаемый.
– В-четвертых, думайте о технической инфляции и рисках.
NestJS v9 is now available!
#nestjs

Сьогодні Каміль офіційно оголосив про реліз нової версії Nest.js.

Що нового:
– Nest.js REPL (read-eval-print loop). У певних випадках може бути заміною пакета nestjs-command та його аналогів. Зручно для troubleshoting-а вашої програми, але може створювати ризики безпеки в production через відсутність логування
– Спрощення роботи з динамічними модулями за допомогою ConfigurableModuleBuilder
– Durable providers полегшує роботу для multi-tenant додатків (наприклад коли кожна компанія має свою базу даних). Не варто використовувати у високонавантажувальних додатках
– Оновлення версії fastify та перехід на ioredis c redis

Перехід на нову версію виглядає простим за умови, що ви вже оновили @nestjs/typeorm на v8.1. Під капотом у цій версії йде оновленя typeorm v0.2 на v0.3. А там багато breaking changes. На місці Каміля я робив би цю зміну якраз у цьому мажорному оновленні.
👍391
Як правильно реалізується 12-й фактор у NestJS?
#nestjs #devops
Нагадаю, що XII фактор це "Задачі адміністрування". Він визначає:
1️⃣ Запуск міграції бази даних
2️⃣ Запуск консолі (REPL) для виконання довільного коду або перевірки моделі застосунку на діючій базі даних
3️⃣ Запуск разових скриптів, збережених в репозиторії застосунку

⚠️ Стратегія розгортання повинна визначати процес застосування міграцій.

NestJS екосистема пропонує нам:
1️⃣ Migrations, щоб синхронізувати схему бази даних та код.
2️⃣ NestJS REPL, для одноразових адміністративних завдань.
3️⃣ Nest Commander/nestjs-command, для регулярних адміністративних завдань.

Конкретні приклади за мій минулий тиждень:
1️⃣ Додав нове поле у модель та згенерував міграцію за допомогою migration:generate.
2️⃣ За допомогою REPL та Stripe Dashboard зробив refund, бо бізнес поки що не готовий це автоматизувати.
3️⃣ Використов CLI, щоб оновити SendGrid шаблони відповідно до змін коду, як про це писав тут

Власне ідея рецепту, нагадати, що у нас є REPL та кілька зручних бібліотек, щоб зручно та швидко писати CLI. Тож користуйтеся ними!
👍27
Як працює watch-mode у NestJS?
#nestjs

Під час розробки NestJS прийнято запускати у watch-mode (live-reload). Приклад:
"scripts": {
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch"
}

У цьому режимі NestJS cli стежить за зміною ts файлів і перезапускає ваш додаток. У nest-cli.json є compilerOptions, який визначає що буде використовуватися для цього – webpack або tsc. У цьому файлі можна визначити watchAssets та перелік не ts файлів assets, при зміни яких необхідно перезапускати додаток. Приклади використання:
– MVC, тобто html-рендерінг.
– email-templates
– .env файл

Детальніше про налаштування NestJS cli у документації.

На завершення кілька цікавостей:
1️⃣ У watch-mode iснує відома проблема нескінченного циклу "File change detected" у Windows-користувачів з TypeScript 4.9+. Рішення у FAQ.
2️⃣ У @nestjs/cli v9.4, яка вийшла минулого тижня, додали manual-restart-watchmode. Про це свідчить напис To restart at any time, enter rs
👍17
Поясню код. За два роки сервіс з обробки stripe webhooks розрісся, тому довелося створити свій #nestjs execution context.
А ще він ілюструє:
Routing is a switch-case construct, expressed in a different syntax.
👍237