Skip to main content
Практика завдань

Що таке контролери в NestJS?

Контролери NestJS

Контролери обробляють вхідні HTTP запити та повертають відповіді. Вони є точкою входу для будь-якого запиту в додатку NestJS. Контролери декоровані за допомогою @Controller(), а їх методи використовують декоратори HTTP методів, такі як @Get(), @Post(), тощо.


Основний Контролер

typescript
import { Controller, Get, Post, Put, Delete, Patch, Param, Body, Query, HttpCode, HttpStatus } from '@nestjs/common'; import { UsersService } from './users.service'; import { CreateUserDto } from './dto/create-user.dto'; @Controller('users') // префікс маршруту: /users export class UsersController { constructor(private readonly usersService: UsersService) {} @Get() findAll(@Query('page') page = 1) { return this.usersService.findAll({ page }); } @Get(':id') findOne(@Param('id') id: string) { return this.usersService.findOne(+id); } @Post() @HttpCode(HttpStatus.CREATED) create(@Body() createUserDto: CreateUserDto) { return this.usersService.create(createUserDto); } @Put(':id') update(@Param('id') id: string, @Body() updateUserDto: CreateUserDto) { return this.usersService.update(+id, updateUserDto); } @Delete(':id') @HttpCode(HttpStatus.NO_CONTENT) remove(@Param('id') id: string) { return this.usersService.remove(+id); } }

Декоратори Параметрів

ДекораторОпис
@Param('id')URL параметр: /users/:id
@Query('page')Запит рядка: /users?page=2
@Body()Повне тіло запиту
@Body('name')Одиничне поле тіла
@Headers('authorization')Заголовок запиту
@Req()Повний об'єкт запиту Express
@Res()Повний об'єкт відповіді Express
@Ip()IP адреса клієнта
@HostParam()Параметр хоста

Дикий Маршрут і Версійність

typescript
@Controller({ path: 'users', version: '1' }) // /v1/users export class UsersV1Controller {} @Get('ab*cd') // відповідає abcd, ab_cd, abecd тощо. @Get(':id/posts') // /users/42/posts

Повернення Відповідей

typescript
// За замовчуванням: NestJS автоматично серіалізує значення повернення в JSON @Get() findAll() { return [{ id: 1 }]; // → 200 { ... } } // Користувацький код статусу @Post() @HttpCode(201) create() { ... } // Використання @Res() для ручного контролю (вимикає обробку відповіді NestJS!) @Get() findAll(@Res() res: Response) { return res.status(200).json({ data: [] }); } // Асинхронність повністю підтримується @Get(':id') async findOne(@Param('id') id: string) { return await this.usersService.findOne(+id); }

Префікси Маршрутів та Глобальний Префікс

typescript
// main.ts — префікс усіх маршрутів з /api/v1 app.setGlobalPrefix('api/v1'); // GET /api/v1/users, POST /api/v1/users тощо.

Резюме

Контролери в NestJS — це декоровані класи, які відображають HTTP запити на методи обробників. Вони лише обробляють маршрутизацію запитів і делегують бізнес-логіку сервісам. Використовуйте декоратори параметрів для витягування даних з запитів, а декоратори HTTP методів для визначення обробників маршрутів.

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

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

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

Дочитали статтю?
Практика завдань