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()).
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.