Study
NestJS

DTO & Validation Pipe

Penjelasan

Library class-validator menambahkan decorator validasi langsung di properti DTO (@IsString(), @IsNotEmpty(), @IsNumber(), dst). Dikombinasikan dengan ValidationPipe (diaktifkan global di main.ts lewat app.useGlobalPipes()), NestJS OTOMATIS memvalidasi body request sebelum masuk ke handler — kalau gagal, otomatis merespons 400 Bad Request tanpa kode manual.

Contoh Konsep

// npm install class-validator class-transformer
// dto/create-produk.dto.ts
import { IsString, IsNumber, MinLength } from 'class-validator';

export class CreateProdukDto {
    @IsString()
    @MinLength(3)
    nama: string;

    @IsNumber()
    harga: number;
}

// main.ts
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    app.useGlobalPipes(new ValidationPipe()); // aktifkan validasi otomatis global
    await app.listen(3000);
}

Praktikum

Tambahkan decorator validasi ke CreateArtikelDto: judul wajib string minimal 5 karakter (@IsString(), @MinLength(5)), isi wajib string dan tidak boleh kosong (@IsString(), @IsNotEmpty()).

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

ValidationPipe HANYA bekerja kalau tipe parameter @Body() adalah CLASS (mis. CreateProdukDto), BUKAN interface atau type biasa — interface/type hilang total setelah dikompilasi ke JavaScript, sedangkan class tetap ada sebagai nilai runtime yang bisa dicek NestJS.