Skip to main content

Основні частини застосунку

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

1. Модулі (Modules)

Модуль - це контейнер, який групує пов'язані елементи застосунку: контролери, сервіси, фільтри, пайпи тощо. Кожен застосунок NestJS завжди має щонайменше один модуль - AppModule (кореневий).

Приклад:

javascript
import { Module } from '@nestjs/common'; import { UsersModule } from './users/users.module'; import { AuthModule } from './auth/auth.module'; @Module({ imports: [UsersModule, AuthModule], }) export class AppModule {}

Роль:

  • визначає межі функціональності;
  • інкапсулює залежності;
  • забезпечує масштабованість (можна додавати нові модулі без переписування старих).

2. Контролери (Controllers)

Контролери приймають вхідні запити (наприклад, HTTP-запити) і повертають відповіді клієнту. Вони визначають роути (ендпоінти) і передають виконання на сервіси.

Приклад:

javascript
import { Controller, Get } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('users') export class UsersController { constructor(private readonly usersService: UsersService) {} @Get() findAll() { return this.usersService.findAll(); } }

Роль:

  • точка входу запитів (HTTP, WebSocket, GraphQL та ін.);
  • не містить бізнес-логіки - лише маршрутизацію й передачу даних у сервіси.

3. Провайдери (Providers)

Провайдер - це будь-яка сутність, яку можна впровадити через Dependency Injection. Найчастіший приклад - сервіс, де зберігається бізнес-логіка.

Приклад:

javascript
import { Injectable } from '@nestjs/common'; @Injectable() export class UsersService { private users = [{ id: 1, name: 'Alex' }]; findAll() { return this.users; } }

Роль:

  • реалізують бізнес-логіку;
  • надають дані й функціонал іншим класам;
  • керуються DI-контейнером NestJS.

4. Декоратори (Decorators)

Декоратори - це ключова особливість NestJS, яка дозволяє писати декларативний і читабельний код. Вони додають метадані, щоб Nest розумів, як обробляти клас чи метод.

Приклади декораторів:

ДекораторПризначення
@Module()описує модуль
@Controller()визначає контролер
@Injectable()позначає клас як провайдер
@Get(), @Post(), @Put()задають HTTP-маршрути
@Body(), @Param(), @Query()витягують дані із запиту
@UseGuards(), @UseInterceptors()підключають middleware-подібні механізми

Роль:

  • спрощують архітектуру, роблячи код декларативним і самодокументованим.

Взаємозв'язок компонентів

javascript
[ Клієнт ] [ Контролер ] → отримує запит [ Сервіс / Провайдер ] → обробляє дані й бізнес-логіку [ Модуль ] → керує залежностями й збіркою компонентів [ Відповідь клієнту ]

Додаткові елементи NestJS (допоміжні рівні)

Хоча чотири основні частини - це фундамент, у реальних застосунках часто використовуються й інші важливі компоненти:

КомпонентОпис
Pipes (пайпи)Перетворюють і валідують вхідні дані
Guards (гварди)Контролюють доступ (наприклад, авторизація)
Interceptors (інтерсептори)Перехоплюють запити/відповіді, додають логіку
Filters (фільтри)Обробляють помилки
MiddlewaresПрацюють до маршрутизації (наприклад, логування)

Підсумкова структура типового застосунку

javascript
src/ ├── app.module.ts ├── users/ │ ├── users.module.ts │ ├── users.controller.ts │ └── users.service.ts ├── auth/ │ ├── auth.module.ts │ ├── auth.controller.ts │ └── auth.service.ts └── main.ts ← точка входу (bootstrap застосунку)

Підсумок

КомпонентПризначення
ModuleГрупує й керує залежностями
ControllerПриймає запити й надсилає відповіді
Provider (Service)Реалізує бізнес-логіку
DecoratorВизначає поведінку й структуру компонентів

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.