Forwarded from 🇺🇦 Math.random(): javascript community
Здравствуйте, друзья!
Хочу пригласить вас на доклад, о перспективном node.js фреймворке NestJS. А расскажет нам о нем Никита Галкин - человек, который знает очень много о бекенде на node.js и охотно делится с миром своими знаниями!
Никита ведет telegram канал - @node_recipes, подписывайтесь и вы найдете большое количество качественных материалов о node.js.
Подробности доклада и регистрация - https://mathrandom.com/webinar01072021
Дата: 1 июля 18:00
#nodejs #nestjs #event #stream #nikitagalkin
Хочу пригласить вас на доклад, о перспективном 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 стабилен и его стоит использовать.
#worth_seeing #nestjs
Сегодня у нас доклад с VinnytsiaJS 2017, которое можно назвать обзорным. 4 года назад я смотрел его, когда у Nest.js не было так подробно расписана документация, не было комьюнити. Для кого это тот доклад стал толчком к изучению всего Nest.js стэка.
Зрелость технологии определяется ее стабильностью. Может считать это видео подтверждением, что Nest.js стабилен и его стоит использовать.
YouTube
NestJS. When patterns matters - Ostap Chervak (VinnytsiaJS 2017)
VinnytsiaJS 2017 #VinnytsiaJS2017
http://vinnytsiajs.org/
https://www.facebook.com/VinnytsiaJS/
https://twitter.com/VinnytsiaJS
http://vinnytsiajs.org/
https://www.facebook.com/VinnytsiaJS/
https://twitter.com/VinnytsiaJS
Как работает query в REST?
#architecture #nestjs
Вопрос с собеседований: "Чему равно id во время выполнения такого запроса:
Какой ответ дадите вы?
- будет ошибка, нельзя использовать два раза один параметр
- 1, потому что first win
- 2, потому что last win
- [1, 2]
В списке нет правильного ответа. Согласно спецификации это должен быть массив, но массив строк, а не чисел. Приведение типов это не часть парсинга строки.
Для передачи массива параметров в query есть такие варианты:
1️⃣
2️⃣
3️⃣
4️⃣
Какой способ выбрать зависит от того какой framework или библиотеку вы используете. Для #nodejs разработчики использующих express ближе всего будет 2-й способ. По умолчанию express используют extended query parser, то есть использует qs. Эта библиотека учитывает
#architecture #nestjs
Вопрос с собеседований: "Чему равно id во время выполнения такого запроса:
?id=1&id=2"Какой ответ дадите вы?
- будет ошибка, нельзя использовать два раза один параметр
- 1, потому что first win
- 2, потому что last win
- [1, 2]
В списке нет правильного ответа. Согласно спецификации это должен быть массив, но массив строк, а не чисел. Приведение типов это не часть парсинга строки.
Для передачи массива параметров в query есть такие варианты:
1️⃣
?foo=bar&foo=qux2️⃣
?foo[]=bar&foo[]=qux3️⃣
?foo%5B%5D=bar&foo%5B%5D=qux4️⃣
?foo=bar,quxКакой способ выбрать зависит от того какой framework или библиотеку вы используете. Для #nodejs разработчики использующих express ближе всего будет 2-й способ. По умолчанию express используют extended query parser, то есть использует qs. Эта библиотека учитывает
[] при парсинге.Закончил доклад в рамках @mathrandomcommunity:
Deep Dive Into NestJS
Кому нужны слайды, то они тут
Буду отвечать на ваши вопросы в комментариях как на ютубе, так и тут.
#nestjs
Deep Dive Into NestJS
Кому нужны слайды, то они тут
Буду отвечать на ваши вопросы в комментариях как на ютубе, так и тут.
#nestjs
YouTube
Deep Dive Into NestJS
NestJS is a framework with excellent documentation and a mature ecosystem. But during this talk, we will not retell its docs. We will go deeper.
The plan is:
- base packages,
- application lifecycle,
- request context and lifecycle,
- declarative code with…
The plan is:
- base packages,
- application lifecycle,
- request context and lifecycle,
- declarative code with…
👍1
Stream-oriented Architecture with Nest
#worth_seeing #nestjs
Докладчик – Kamil Myśliwiec, создатель Nest.js. В докладе идет речь не об #nodejs Streams, а об архитектуре реактивного приложения. Для людей ранее не работавших с реактивностью рекомендую посмотреть обзор RxJS.
В ходе доклада Камиль на пример игры сравнивает layered и stream-oriented архитектуры. Это позволяет лучше понять концепт.
Слайды
#worth_seeing #nestjs
Докладчик – Kamil Myśliwiec, создатель Nest.js. В докладе идет речь не об #nodejs Streams, а об архитектуре реактивного приложения. Для людей ранее не работавших с реактивностью рекомендую посмотреть обзор RxJS.
В ходе доклада Камиль на пример игры сравнивает layered и stream-oriented архитектуры. Это позволяет лучше понять концепт.
Слайды
YouTube
Taming reactive Node.js: Stream-oriented architecture with NestJS | Kamil Myśliwiec
accessible for deaf/hearing-impaired: sign language interpreter (DGS) visible for complete duration + captions // slide collection https://buff.ly/2YLcPlA // Licence: CC BY-ND https://buff.ly/2TN3XIo
The stream-oriented architectures are still very rare in…
The stream-oriented architectures are still very rare in…
Топ 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 очень затруднен.
В завершение скажу, что ошибки на уровне проектирования и архитектуры приложения проектозависимы.
#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 комьюнити:
Стоить отметить две проблемы
А теперь хроника событий:
– 12 октября выявленная security issue в
– фикса нет вплоть до 28 октября, поэтому Камиль делает форк, который можно установить как
– 20 ноября наконец-то выходят фиксы, но с брейкинг чеджами.
– команда NestJS рассматривает переход на форки в рамках 9 версии, которая не известна когда будет.
Какие выводы из этой истории:
– Во-первых, обновите пакет если вы еще этого не сделали
– Во-вторых, используйте в CI/CD npm audit, чтобы знать о проблемах сразу
– Во-третьих, проверьте может ли ваш код перейти на
– В-четвертых, думайте о технической инфляции и рисках.
#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 через відсутність логування
– Спрощення роботи з динамічними модулями за допомогою
– Durable providers полегшує роботу для multi-tenant додатків (наприклад коли кожна компанія має свою базу даних). Не варто використовувати у високонавантажувальних додатках
– Оновлення версії fastify та перехід на ioredis c redis
Перехід на нову версію виглядає простим за умови, що ви вже оновили
#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. На місці Каміля я робив би цю зміну якраз у цьому мажорному оновленні.👍39❤1
Як правильно реалізується 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. Тож користуйтеся ними!
#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). Приклад:
У цьому режимі NestJS cli стежить за зміною ts файлів і перезапускає ваш додаток. У
– MVC, тобто html-рендерінг.
– email-templates
– .env файл
Детальніше про налаштування NestJS cli у документації.
На завершення кілька цікавостей:
1️⃣ У watch-mode iснує відома проблема нескінченного циклу "File change detected" у Windows-користувачів з TypeScript 4.9+. Рішення у FAQ.
2️⃣ У
#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.👍23❤7