पाठ 10 / 34
Pipes और Validation
Handlers चलने से पहले ValidationPipe, class-validator DTOs और custom pipes से input validate व transform करें।
Built-in pipes और class-validator
DTOs को automatically validate करने के लिए ValidationPipe को class-validator decorators के साथ उपयोग करें।
// 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
Unique validation या transformation logic के लिए custom pipe बनाने के लिए PipeTransform को implement करें।
@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) { ... }route param पर ParseIntPipe
route params string में आते हैं। ParseIntPipe उन्हें number बनाता है या 400 देता है।
GET /users/7परid = 7(number) मिलता है।GET /users/abcअपने आप400 Bad Requestलौटाता है।
import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) {
return { id, type: typeof id };
}
}
Output:
{"id":7,"type":"number"}त्वरित जाँच
त्वरित जाँच: `ValidationPipe` default में unknown properties reject नहीं करता। कौन सा option उन्हें हटाता है?
- `whitelist: true`
- `transform: false`
- `skipMissingProperties: true`
Answer
`whitelist: true` — `whitelist: true` बिना validation decorators वाली properties हटाता है; `forbidNonWhitelisted` उन्हें error बनाता है।