Lesson 10 / 33
Pipes & Validation
Transform and validate data before handlers receive it.
Built-in pipes & class-validator
Use ValidationPipe with class-validator decorators to automatically validate DTOs.
// dto
import { IsString, IsEmail, IsNumber } from 'class-validator';
export class CreateUserDto {
@IsString()
name: string;
@IsEmail()
email: string;
@IsNumber()
age: number;
}
// main.ts
app.useGlobalPipes(new ValidationPipe());Custom pipes
Implement PipeTransform to create a custom pipe for unique validation or transformation logic.
@Injectable()
export class ParseIntPipe implements PipeTransform<string, number> {
transform(value: string): number {
const num = parseInt(value, 10);
if (isNaN(num)) throw new BadRequestException();
return num;
}
}
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) { ... }