Nest (NestJS) — це програмний каркас для створення ефективних, масштабованих програм Node.js на стороні сервера.

Він використовує JavaScript, створений і повністю підтримує TypeScript (все ще дозволяє розробникам кодувати на чистому JavaScript) і поєднує елементи ООП (об’єктно-орієнтоване програмування), ФП (функціональне програмування) і ФРП (функціональне реактивне програмування).

Nest надає готову архітектуру застосунів, яка дозволяє розробникам та командам створювати легко тестовані, масштабовані, слабозв'язані та прості в обслуговуванні застосунки.

Сирцевий код публікується під ліцензією MIT.

Історія У лютому 2017 року Каміл Мишливец, натхненний Angular, створив фреймворк на базі Node.js з архітектурою, що базується на Socket.IO та Express.js. Згідно з репозиторієм NestJS на GitHub, перший реліз з тегами, версія 4.4.0, відбувся 23 листопада 2017 року.

Протягом наступних років фреймворк розширив свою функціональність, додавши підтримку додаткових адаптерів та драйверів, таких як Fastify, щоб надати більше можливостей розробникам. Він також запровадив інтеграцію з популярними брокерами повідомлень, включаючи RabbitMQ та Kafka,, для полегшення комунікації в розподілених системах.

Зараз NestJS активно підтримується командою Trilon (колишня Nest Labs), де Каміл є головним розробником і CEO. Проєкт має велику спільноту з сотнями контриб'юторів на GitHub, понад 60k зірок і використовується в роботі великими компаніями.

NestJS популярний для корпоративних застосунків завдяки модульності, впровадженню залежностей та TypeScript. Критика стосується "надмірній зарозумілості" для простих проєктів, але для мікросервісів і складних систем — це стандарт.

Архітектура NestJS має модульну архітектуру з чітким поділом на основні компоненти. Основні особливості включають ін'єкцію залежностей, декоратори та підтримку кількох парадигм програмування.

Ключові компоненти Модулі (@Module) групують пов'язану функціональність, контролери та сервіси, забезпечуючи ізоляцію та перевикористання коду. Контролери (@Controller) обробляють вхідні запити, маршрутизують їх і повертають відповіді. Сервіси (@Injectable) містять бізнес-логіку, ізольовані від контролерів для кращої тестованості. Репозиторії (теж @Injectable) здійснюють посередництво між бізнес-логікою (сервісами) та шаром доступу до даних (базою даних), тобто інкапсулюють логіку, необхідну для доступу до джерел даних.

NestJS використовує впроважєення залежностей (Dependency Injection) для автоматичного керування залежностями між компонентами, що спрощує тестування та заміну реалізацій. Підтримує декоратори TypeScript для декларативного коду, модульність для масштабування та багатошарову структуру (контролери → сервіси → репозиторії).

NestJS пропонує кілька можливостей для обробки запитів та відповідей. Проміжне програмне забезпечення (Middleware) базується на Express та виконується перед обробником запиту. NestJS розрізняє різні види Middleware. Захисні елементи використовуються для контролю доступу до маршрутів, визначаючи, чи відповідає запит певним умовам. Перехоплювачі дозволяють виконувати додаткову логіку до або після виконання методу. Перехоплювач повинен реалізувати метод intercept класу NestInterceptor.

Каркас базується на Express/Fastify, але додає абстракції для корпоративних застосунків: парадигми об'єктно-орієнтованого програмування, функціонального програмування та реактивного функціонального програмування, вбудований TypeScript та інструменти для мікросервісів.

Популярність NestJS використовують Sanofi, Adidas, Autodesk, Mercedes-Benz, GitLab, Red Hat, BMW, Roche, IBM, Decathlon, Société Générale, JetBrains, TotalEnergies, Capgemini, REWE digital та інші.

Виноски

Посилання

Nest.js: A Progressive Node.js Framework