NestJSIntermediate
NestJS Pipes & Validation
Built-in pipes, ValidationPipe, DTO, class-validator — data transform ও validate বাংলায়।
12টি অংশবাংলা ভাষায়
Pipe incoming data-কে transform/validate করতে ব্যবহৃত হয় — route param-কে number করা, body validate করা ইত্যাদি।
Built-in Pipes
import { ParseIntPipe, ParseUUIDPipe, Controller, Get, Param } from "@nestjs/common";
@Controller("users")
export class UsersController {
@Get(":id")
// :id auto number-এ convert হবে
findOne(@Param("id", ParseIntPipe) id: number) {
console.log(typeof id); // "number"
return { id };
}
@Get("uuid/:id")
findWithUuid(@Param("id", ParseUUIDPipe) id: string) {
return { id };
}
@Get("default/:id")
// ceil ডিফল্ট omit করা যায়
findDefault(@Param("id", new ParseIntPipe({ errorHttpStatusCode: 404 })) id: number) {
return { id };
}
}DTO + class-validator (ডেফল্ট পদ্ধতি)
npm i class-validator class-transformersrc/users/dto/create-user.dto.tstypescript
typescript
import { IsEmail, IsInt, IsString, Min, Max, MinLength } from "class-validator";
export class CreateUserDto {
@IsString()
@MinLength(2, { message: "নাম কমপক্ষে 2 অক্ষর" })
name: string;
@IsEmail()
email: string;
@IsInt()
@Min(18)
@Max(120)
age: number;
}ValidationPipe ব্যবহার
main.ts — global validationtypescript
typescript
import { NestFactory } from "@nestjs/core";
import { ValidationPipe } from "@nestjs/common";
import { AppModule } from "./app.module";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// global ValidationPipe — সব DTO auto-validate
app.useGlobalPipes(new ValidationPipe({
whitelist: true, // DTO-তে নেই এমন property strip
forbidNonWhitelisted: true, // unknown property → 400
transform: true, // type transform
}));
await app.listen(3000);
}
bootstrap();controller-এ DTOtypescript
typescript
import { Body, Controller, Post } from "@nestjs/common";
import { CreateUserDto } from "./dto/create-user.dto";
@Controller("users")
export class UsersController {
@Post()
create(@Body() dto: CreateUserDto) {
// dto valid — whitelist applied
return dto;
}
}Custom Pipe
src/common/pipes/title-case.pipe.tstypescript
typescript
import { PipeTransform, Injectable, BadRequestException } from "@nestjs/common";
@Injectable()
export class TitleCasePipe implements PipeTransform {
transform(value: string): string {
if (typeof value !== "string") {
throw new BadRequestException("string দরকার");
}
return value
.split(" ")
.map((w) => w[0].toUpperCase() + w.slice(1))
.join(" ");
}
}
// ব্যবহার
@Param("name", TitleCasePipe) name: stringGlobal Pipe setup
whitelist: true মানে DTO-তে না থাকলে property deleted — API predictable থাকে। যত দ্রুত possible validation world-class solver ব্যবহার করুন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।