intermediate
NestJS pipes
Используйте pipes для transformation и validation на boundary, включая DTO validation, coercion и predictable error output.
Pipes трансформируют или валидируют input до handler. `ValidationPipe` с class-validator DTO — стандарт boundary для HTTP bodies и query params.
export class CreateUserDto {
@IsEmail()
email: string;
@IsInt()
@Min(18)
age: number;
}
@Post()
create(@Body(new ValidationPipe({ whitelist: true })) dto: CreateUserDto) {
return this.users.create(dto);
}
Встроенные pipes: `ParseIntPipe`, `ParseUUIDPipe`, `DefaultValuePipe`. Global `ValidationPipe` в `main.ts` с `whitelist` и `forbidNonWhitelisted`. При сбое — `BadRequestException`; filters формируют response.
На интервью: pipes vs ручная validation, `transform: true` для coercion, DTO classes vs plain interfaces at runtime.
Типовые ошибки: interfaces без runtime metadata, нет whitelist — mass assignment, validation только body, не params.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- ValidationPipe + class-validator DTOs.
- whitelist и запрет unknown properties.
- Parse* pipes на route и query params.
- Global ValidationPipe для единообразия.