Как использовать декораторы в контроллере NestJS?
NestJS — это фреймворк для создания серверных приложений на Node.js, который обеспечивает мощную архитектуру для построения масштабируемых приложений. Один из ключевых элементов NestJS — это декораторы, которые позволяют нам описывать поведение классов и их методов. В этом ответе мы разберем, как использовать декораторы в контроллере NestJS на примере простейшего приложения.
Что такое декораторы?
Декораторы в TypeScript — это специальные функции, которые позволяют добавлять метаданные к классам, методам и свойствам. В NestJS декораторы используются для установки маршрутов, обработки запросов и внедрения зависимостей.
Основные декораторы для контроллеров в NestJS
@Controller()
: Декоратор, который определяет класс как контроллер.@Get()
, @Post()
, @Put()
, @Delete()
: Декораторы для обработки HTTP методов.@Param()
: Декоратор для извлечения параметров из URL.@Body()
: Декоратор для извлечения тела запроса.@Query()
: Декоратор для извлечения параметров из строки запроса.Пример использования декораторов в контроллере
Давайте создадим простой контроллер, который будет управлять записями "пользователь".
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
@Controller('users')
export class UsersController {
private users = []; // Наш «база данных» пользователей для примера
@Get()
getAllUsers() {
return this.users;
}
@Post()
createUser(@Body() createUserDto: { name: string; age: number }) {
const newUser = {
id: this.users.length + 1,
...createUserDto,
};
this.users.push(newUser);
return newUser;
}
@Get(':id')
getUserById(@Param('id') id: number) {
return this.users.find(user => user.id === id);
}
}
Разбор кода:
@nestjs/common
.@Controller('users')
, чтобы указать, что этот контроллер будет обрабатывать запросы, начинающиеся с /users
.getAllUsers
: Используем декоратор @Get()
, который указывает, что этот метод будет обрабатывать GET-запросы. Он возвращает всех пользователей из массива users
.createUser
: Этот метод использует декоратор @Post()
, чтобы обрабатывать POST-запросы на создание нового пользователя. Декоратор @Body()
позволяет получить данные из тела запроса.getUserById
: Метод с декоратором @Get(':id')
, который позволяет извлекать параметр id
из URL и возвращать конкретного пользователя.Заключение
Использование декораторов в NestJS позволяет создать четкую и структурированную архитектуру приложения. Декораторы делают код более читабельным и упрощают управление маршрутизацией, обработкой запросов и внедрением зависимостей. Убедитесь, что вы тщательно изучаете каждый декоратор и его применение для построения эффективных контроллеров в вашем приложении.