← Назад к вопросам

Что такое Pipe в NestJS?

2.0 Middle🔥 121 комментариев
#Фреймворки и библиотеки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Pipe (труба) в NestJS — это специализированный компонент архитектуры, отвечающий за валидацию и трансформацию входящих данных. Это один из ключевых элементов так называемого "request processing pipeline" NestJS.

Основные задачи Pipe

  1. Валидация — проверка соответствия данных ожидаемому формату
  2. Трансформация — преобразование данных в требуемый тип
  3. Обработка ошибок — корректное возвращение ошибок валидации

Встроенные Pipes

NestJS предоставляет готовые pipes для частых сценариев:

  • ValidationPipe — валидирует данные на основе class-validator декораторов
  • ParseIntPipe — преобразует строку в целое число
  • ParseUUIDPipe — проверяет и преобразует UUID
  • DefaultValuePipe — устанавливает значение по умолчанию
  • ParseBoolPipe — преобразует в boolean

Пример использования

import { Controller, Post, Body, UsePipes } from '@nestjs/common';
import { ValidationPipe } from '@nestjs/common';
import { CreateUserDto } from './create-user.dto';

@Controller('users')
export class UsersController {
  @Post()
  @UsePipes(new ValidationPipe())
  create(@Body() createUserDto: CreateUserDto) {
    return createUserDto;
  }
}

Создание собственного Pipe

import { Injectable, PipeTransform, 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('Validation failed');
    }
    return val;
  }
}

Применение Pipes

Pipes можно применять на разных уровнях:

  1. На параметр маршрута:
@Get(':id')
getUser(@Param('id', ParseIntPipe) id: number) {}
  1. На тело запроса:
@Post()
create(@Body(new ValidationPipe()) createUserDto: CreateUserDto) {}
  1. Глобально:
app.useGlobalPipes(new ValidationPipe());

Практическое применение

Pipes критически важны для создания надёжного API:

  • Защита от некорректных данных
  • Автоматическое преобразование типов
  • Централизованная обработка ошибок валидации
  • Переиспользуемая логика валидации

Это позволяет держать бизнес-логику в контроллерах чистой и не смешивать её с валидацией.

Что такое Pipe в NestJS? | PrepBro