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Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.