РекомендуетсяNestJSTypeScript

NestJS: ValidationPipe и DTO

Runtime-валидация требует классов DTO с правилами. TypeScript-интерфейс не проверяет входящий JSON.

Проверено Изменено

Плохо

interface CreateOrder { title: string }
// Тип исчезает после компиляции.

Хорошо

class CreateOrderDto {
  @IsString()
  @MaxLength(200)
  title!: string;
}
app.useGlobalPipes(new ValidationPipe({
  whitelist: true, forbidNonWhitelisted: true
}));

Почему это важно

Клиент может отправить поля и типы, которых нет в TypeScript-описании.

Когда применять

NestJS с class-validator/class-transformer, декораторами и DTO-классом в @Body(). Импорты IsString/MaxLength — class-validator, ValidationPipe — @nestjs/common. Guard/Policy для доступа настраивается отдельно.

Кто что делает

Человек

Определяет допустимые поля и контракт ошибки.

AI-агент

Настраивает ValidationPipe, DTO и запросы с некорректным JSON.

Пример применения

POST /orders принимает title длиной до 200 символов. Поле isPaid, присланное клиентом, отклоняется; оплату меняет только серверный процесс.

Как проверить у себя

  • Число вместо title и лишнее поле получают 400.
  • Авторизация проверяется отдельно от DTO.
ПервоисточникиИстория изменений на GitHub

Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.