Как использовать Pipes в NestJS?
Вопрос проверяет, как Pipes обрабатывают входящие данные, включая валидацию и трансформацию.
Короткий ответ
Pipes в NestJS трансформируют или валидируют входящие данные до того, как они попадают в контроллер. Их можно создавать вручную, реализуя интерфейс PipeTransform, или использовать встроенные, такие как ValidationPipe. Pipes применяются на уровне методов, контроллеров или глобально через @UsePipes.
Длинный ответ
Pipes в NestJS используются для:
- Проверки данных на соответствие заданным условиям (валидация).
- Преобразования данных из одного типа в другой (трансформация).
Ключевой метод Pipe — transform(value, metadata), где:
- value — данные из запроса.
- metadata — дополнительная информация о параметре.
Пример: кастомный Pipe для преобразования строки в число:
import { PipeTransform, Injectable, ArgumentMetadata, BadRequestException } from '@nestjs/common';
@Injectable()
export class ParseIntPipe implements PipeTransform<string, number> {
transform(value: string, metadata: ArgumentMetadata): number {
const val = parseInt(value, 10);
if (isNaN(val)) {
throw new BadRequestException('Входное значение должно быть числом');
}
return val;
}
}Использование в контроллере:
import { Controller, Get, Param } from '@nestjs/common';
import { ParseIntPipe } from './parse-int.pipe';
@Controller('items')
export class ItemsController {
@Get(':id')
getItem(@Param('id', new ParseIntPipe()) id: number) {
return `Идентификатор: ${id}`;
}
}