← Назад к вопросам
Для чего используются контроллеры в Nest.js?
1.8 Middle🔥 191 комментариев
#TypeScript#Фреймворки и библиотеки
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Контроллеры в Nest.js
Контроллеры — это класс, который обрабатывает входящие HTTP-запросы и отправляет HTTP-ответы. Это первый уровень обработки запроса, который маршрутизирует данные в соответствующие сервисы для обработки бизнес-логики.
Основная роль контроллеров
- Маршрутизация запросов — определяет какой HTTP метод (GET, POST, PUT, DELETE) соответствует какому методу класса
- Валидация входных данных — проверяет корректность query параметров, body, headers
- Преобразование данных — конвертирует пришедшие данные в нужный формат
- Вызов сервисов — делегирует бизнес-логику в Service слой
- Форматирование ответа — готовит Response в нужном формате для клиента
Структура контроллера
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';
@Controller('users')
export class UsersController {
constructor(private usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(id);
}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
}
Декораторы в контроллерах
@Controller('путь') — определяет префикс маршрута для всех методов
@Controller('api/v1/users')
export class UsersController {}
Методы HTTP:
- GET запрос: @Get()
- POST запрос: @Post()
- PUT запрос: @Put()
- DELETE запрос: @Delete()
- PATCH запрос: @Patch()
Извлечение данных:
- @Param('id') — параметр из URL пути
- @Query() — query параметры
- @Body() — JSON тело запроса
- @Headers() — HTTP заголовки
Архитектурные слои
Client -> Controller -> Service -> Repository -> Database
Практический пример
@Controller('posts')
export class PostsController {
constructor(private postsService: PostsService) {}
@Post()
async create(@Body() createPostDto: CreatePostDto) {
if (!createPostDto.title) {
throw new BadRequestException('Заголовок обязателен');
}
return this.postsService.create(createPostDto);
}
}
Почему разделение на Controller и Service?
- Single Responsibility — контроллер для HTTP, сервис для логики
- Тестируемость — сервис легко тестировать без HTTP
- Переиспользование — один сервис в разных контроллерах
- Масштабируемость — легче добавлять новые endpoints
Контроллеры — это входная точка всех API запросов, их задача переносить данные между HTTP и бизнес-логикой.