Що таке контролери в 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.