🎀 D2 · Controller Decorator'ları: @Get, @Post, @Body
D2 · Controller Decorator'ları: @Get: Nest'in controller decorator'ları, Spring annotation'larının **neredeyse birebir TypeScript çevirisi** gibidir: Spring'de `@RestController`
Nest'in controller decorator'ları, Spring annotation'larının **neredeyse birebir TypeScript çevirisi** gibidir: Spring'de `@RestController` + `@RequestMapping("/bugs")` + `@GetMapping` bir sınıf ve metot etiketlerken, Nest'te `@Controller('bugs')` + `@Get()` AYNI işi yapar; `@RequestBody` yerine `@Body()`, `@PathVariable` yerine `@Param()` gelir. Peki bu kadar benzerken Express'ten sonra Nest'i neden ayrı öğreniyoruz? Çünkü Express'te (C2) `req.params`/`req.query` fonksiyon GÖVDESİNDE elle okunurken, Nest'te bu bilgi decorator'lar sayesinde doğrudan METOT PARAMETRESİ olarak gelir — sözleşme, imzanın kendisinde görünür kılınır, tıpkı Spring'de olduğu gibi. Bu, "okunabilirlik" tercihinden fazlasıdır: parametre bir decorator ile İŞARETLENMEZSE (örn. `@Body()` unutulursa), Nest o parametreyi `undefined` bırakır — Express'teki `express.json()` sırası hatasına BENZER ama kök nedeni farklı bir sessiz hata sınıfı doğurur.
Aynı Endpoint'ler, Decorator ile
**🐞 Defect Doğum Anı — `@Body()` decorator'ı unutulursa** **Kod:** `create(body: any)` — parametre var, tipi de yazılmış, ama başına `@Body()` decorator'ı KONMAMIŞ. **Ne olur:** Nest'in HTTP adaptörü (Express) gövdeyi zaten ayrıştırmıştır, ama decorator olmadan Nest bu veriyi metoda HANGİ parametreye bağlayacağını bilemez — `body` parametresi `undefined` kalır. `POST /api/v1/bugs { "title": "..." }` request'i 201 döner ama kayıt tamamen boştur. **Neden sinsi:** TypeScript hiçbir hata vermez (`body: any` geçerli bir parametredir), Nest de çalışma zamanında sessizce `undefined` geçer — tıpkı C3'teki `express.json()` sıra hatasının SONUCU gibi görünür ama kök nedeni tamamen farklıdır (orada middleware sırası, burada eksik decorator). **Tester nerede yakalar:** POST sonrası GET ile kaydı tekrar okuyup tüm alanların boş geldiğini görünce — "201 aldım ama içerik boş" ailesinin NestJS'teki üçüncü örneği (bkz. B1, C3).
🎬 Decorator Yoksa, Parametre Yok
HTTP adaptörü ayrıştırır
Decorator yok → undefined
İstemci `POST /api/v1/bugs` request'ini JSON gövdeyle gönderiyor.
Nest'in altındaki HTTP adaptörü (Express) gövdeyi zaten bir JavaScript nesnesine ayrıştırdı.
DOĞRU YOLDA: `@Body()` decorator'ı bu ayrıştırılmış veriyi metot parametresine BAĞLAR.
DECORATOR EKSİKSE: Nest veriyi hangi parametreye bağlayacağını bilemez, parametre `undefined` kalır.
Ders — Ayrıştırma ile bağlama iki AYRI adımdır. Tester yine "201 aldım" ile yetinmez, dönen veriyi doğrular.
Request'ten Metot Parametresine
HTTP adaptörü gövdeyi/parametreleri ayrıştırır — bu Express katmanının işidir.
@Body()/@Param()/@Query() ayrıştırılmış veriyi doğru metot parametresine yerleştirir.