İçeriğe geç
XDD.baby Yazılım Öğrenme
Sözlük Hata rehberi 0/56

Yazılım Öğrenme

Hata rehberi

Kod yazan herkes hata alır, önemli olan mesajı okuyabilmek. Burada derslerde anlatılan 506 hata var. Terminalde gördüğün mesajın bir parçasını arama kutusuna yapıştır.

SyntaxError 59

Yazım hatası: kod daha çalışmadan, dilin kurallarına uymayan bir yer bulundu (eksik parantez, fazla süslü parantez, yanlış işaret).

> işareti çıktı, komutlar Uncaught SyntaxError veriyor

Terminale yalnızca node yazıp Enter'a basınca. Node, satır satır JavaScript yazabileceğin etkileşimli moduna girer ve istem > olur. Bu modda yazdığın her şeyi JavaScript sanır; node merhaba.js JavaScript olmadığı…

Ders 0: Başlamadan önce: bilgisayar, program ve araçların →

SyntaxError: Unexpected end of input

Açtığın bir { işaretini kapatmayı unutunca. Node dosyanın sonuna gelir ama blok hâlâ açıktır. Yukarıda, VS Code'un yardımı bölümünde gördün.

Ders 2: Karşılaştırma ve karar: if / else →

SyntaxError: Unexpected token '}' (süslüyü hemen kapatmak)

Fonksiyonun süslü parantezini ilk satırda hemen kapatıp gövdeyi altına yazınca. Gövde sandığın satırlar fonksiyonun dışında kalır, en sondaki } işareti de fazla gelir.

Ders 3: Çoklu karar ve fonksiyon →

SyntaxError: Unexpected token '{' (bitişik elseif)

else if sözcüklerini bitişik (elseif) yazınca. Aynı mesajı Ders 2'de else sözcüğüne koşul yazınca da görmüştün; ısınmadaki if (mana > 10 { satırı da bu mesajı verir.

Ders 3: Çoklu karar ve fonksiyon →

SyntaxError: Unexpected token 'else' (else'ten sonra else if)

else bloğundan sonra bir else if daha yazınca. else "geri kalan her şey" demektir, zincirin son halkasıdır.

Ders 3: Çoklu karar ve fonksiyon →

SyntaxError: Unexpected token '{' (objeler arasında virgül yok)

Dizideki iki objenin arasına virgül koymayı unutunca. Ders 4'teki "virgül unutmak" hatasının dizideki hâli.

Ders 5: Dizi ve döngü: bütün takım →

SyntaxError: Unexpected end of input (kapanmamış ters tırnak)

Ters tırnağı açıp kapatmayı unutunca. Çift tırnaklı metin satır sonunda biter; ters tırnaklı metin ise çok satırlı olabildiği için JavaScript kapanışı dosyanın sonuna kadar arar, bulamayınca "girdi beklenmedik yerde…

Ders 9: Metinler ve sayılarla çalışmak →

SyntaxError: Illegal break statement

forEach'i yarıda kesmek için içine break yazınca. break yalnızca gerçek döngülerin (for, for...of, while) içinde çalışır; forEach'e verdiğin şey bir döngü değil, bir fonksiyon. Node bunu daha program başlamadan fark…

Ders 11: Dizi metotları: map, filter, find, reduce →

SyntaxError: Expected property name or '}' in JSON at position 2 (line 1 column 3)

JSON.parse'a JSON kurallarına uymayan bir metin verince. En sık sebepler: anahtarlarda tırnak yok, çift tırnak yerine tek tırnak kullanılmış, sonda fazladan virgül var.

Ders 12: Obje ve dizilerde ileri teknikler →

SyntaxError: The requested module './dukkan.js' does not provide an export named 'fiyatlar'

Vitrinde olmayan bir şeyi istediğinde: o dosyada export yazmayı unuttuğunda ya da adı farklı yazdığında (fiyatbul, FiyatBul).

Ders 14: Modüller ve npm →

SyntaxError: The requested module './dukkan.js' does not provide an export named 'default'

Adlı dışa aktarılmış bir şeyi süslü parantezsiz almaya çalışınca.

Ders 14: Modüller ve npm →

SyntaxError: Cannot use import statement outside a module

package.json'da "type": "commonjs" yazarken .js dosyasında import kullanınca. npm init bu satırı kendiliğinden yazdığı için ilk karşılaşacağın yer burası.

Ders 14: Modüller ve npm →

SyntaxError: Private field '#hp' must be declared in an enclosing class

Özel alana sınıfın dışından ulaşmaya çalışınca. Sınıfın içinde this.#hp yazıp sınıfın gövdesine #hp satırını koymayı unutunca da aynı mesaj çıkar.

Ders 16: Sınıflar ve this →

SyntaxError: Cannot use import statement outside a module

package.json'daki "type": "commonjs" satırını "module" yapmayı unutunca. Node dosyayı eski düzende okur ve import'u tanımaz. Bu hatayı Ders 14'ten tanıyorsun; yeni bir projede npm init -y'den hemen sonra en sık…

Ders 17: Blok 2 projesi: terminalde metin tabanlı oyun →

SyntaxError: "undefined" is not valid JSON

Depodaki metin JSON değilse. Mesajı Ders 12'den tanıyorsun. Sık yaşanan bir yol: kaydet'i parametreli yazıp (function kaydet(liste)) bir yerde argümanı unutmak. JSON.stringify(undefined) metin değil undefined…

Ders 23: Formlar, kullanıcı girdisi ve localStorage →

SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

Yanıtın türüne bakmadan json() çağırınca, gövde de bir HTML sayfası olunca. Denemek için ders26 klasöründe tur.mjs adında bir dosya oluştur. Burada POST bekleyen adrese GET gidiyor; sunucu 405 ve bir HTML sayfasıyla…

Ders 26: HTTP derinlemesine →

SyntaxError: Unexpected token 'L', "Lux" is not valid JSON

Gövdesi JSON olmayan bir POST geldiğinde, JSON.parse try içinde değilse. Tek bir bozuk istek bütün sunucuyu düşürür.

Ders 27: Node.js ile ilk sunucu →

SyntaxError: Unexpected token '<', "<!doctype "... is not valid JSON

API'nin adresi yerine belgenin sayfasını isteyince. Belgeden kopyalarken en sık yapılan yanlış bu: open-meteo.com/en/docs insanlar için bir web sayfası, api.open-meteo.com/v1/forecast ise programlar için API. Bu…

Ders 30: Dış API'lere bağlanmak →

SyntaxError: Unexpected end of JSON input (her istek 500 alıyor)

veri.json boş ya da yarım kalmışsa. writeFile önce dosyanın içini boşaltır, sonra yeni içeriği yazar; program tam o arada kapanırsa (barındırıcı yeniden başlatırken, elektrik kesilince) dosya boş kalabilir. Bu, Ders…

Ders 32: Yayına alma ve Blok 4 projesi: takım API'si →

SQL'deki çift tırnak JavaScript metnini kapatıyor

İçinde "oyuncuId" gibi çift tırnaklı bir takma ad geçen SQL'i çift tırnaklı bir JavaScript metnine yazınca. JavaScript metni ilk iç tırnakta biter sanır.

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

SyntaxError: Unterminated string in JSON

Cevap max_tokens sınırına takılıp cümlenin ortasında kesildiğinde. Bu durumda mesaj.stop_reason değeri "max_tokens" olur ve yapılandırılmış çıktı bile yarım JSON'u tamamlayamaz. Kesilmiş bir cevabı json-dene.ts'te dene:

Ders 48: İstem yazmak ve yapılandırılmış çıktı →

SyntaxError: The requested module './ajan.ts' does not provide an export named 'Istemci'

Bir tipi import type yerine düz import ile alıp programı doğrudan node ile çalıştırınca. Burada sahte-istemci.ts'nin ikinci satırında type sözcüğü unutulmuş:

Ders 50: Basit bir ajan yazmak →

ReferenceError 21

Tanınmayan ad: var olmayan ya da henüz oluşturulmamış bir kutuyu (değişkeni) kullanmaya çalıştın.

ReferenceError: DurumYaz is not defined

Fonksiyonu tanımladığından farklı harflerle çağırınca. Büyük-küçük harf de farklılık sayılır.

Ders 3: Çoklu karar ve fonksiyon →

ReferenceError: toplam is not defined (fonksiyonun içindeki değişken)

Bir fonksiyonun içinde oluşturduğun bir değişkeni ya da bir parametreyi fonksiyonun dışında kullanınca. Örneğini kapsam bölümünde gördün.

Ders 3: Çoklu karar ve fonksiyon →

ReferenceError: oyuncuadi is not defined

Bir adı oluşturduğundan farklı yazınca (büyük-küçük harf dahil), metnin tırnaklarını unutunca ya da fonksiyonun içinde açılmış bir kutuyu dışarıda kullanınca.

Ders 8: Tekrar ve yardımsız mini sınav →

ReferenceError: Cannot access 'kritikVurus' before initialization

const (ya da let) ile tanımlanmış bir fonksiyonu, tanımlandığı satırdan önce çağırınca.

Ders 10: Fonksiyonlar derinlemesine →

ReferenceError: require is not defined in ES module scope

Bir CommonJS satırını (bu bölümdeki örneği ya da internetten kopyaladığın bir require satırını) "type": "module" olan bir projeye yazınca.

Ders 14: Modüller ve npm →

ReferenceError: hasar is not defined

Metodun içinde objenin alanını this. olmadan yazınca. Metodun içinde hasar adında bir değişken yok; hasar objenin alanı ve ona yalnız this.hasar diye ulaşılır.

Ders 16: Sınıflar ve this →

ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor

Alt sınıfın constructor metodunda, super(...) çağrısından önce this kullanınca ya da super çağrısını hiç yazmayınca.

Ders 16: Sınıflar ve this →

ReferenceError: Cannot access 'Sampiyon' before initialization

Sınıfı, tanımladığın satırdan önce kullanınca. Ders 10'da function ile yazılan fonksiyonların tanımlanmadan önce çağrılabildiğini (hoisting) gördün; sınıflar böyle değildir, let ve const gibi davranırlar.

Ders 16: Sınıflar ve this →

Uncaught ReferenceError: takm is not defined

Sayfadaki JavaScript'te bir adı yanlış yazınca: Node'dan tanıdığın hata, bu kez Console'da. Şu satırda takim yerine takm yazılmış:

Ders 18: Web nasıl çalışır? →

ReferenceError konsolda bir an görünüp kayboluyor

preventDefault dinleyicinin sonunda dururken ondan önceki bir satır hata verirse. Hata fonksiyonu yarıda keser, preventDefault'a sıra hiç gelmez; tarayıcı formu gönderir, sayfa yenilenir ve konsol temizlenir.…

Ders 23: Formlar, kullanıcı girdisi ve localStorage →

ReferenceError: document is not defined

Bir bileşen testini, Vitest'e sahte sayfa kullanmasını söylemeden çalıştırınca. Vitest varsayılan olarak testleri düz Node ortamında çalıştırır; Node'da tarayıcıdaki document yoktur.

Ders 53: Test yazmak ve kod kalitesi →

TypeError 51

Tür hatası: bir değerle yapılamayacak bir şeyi yapmaya çalıştın (sayıyı fonksiyon gibi çağırmak, olmayan bir şeyin özelliğini okumak).

TypeError: Cannot read properties of undefined (reading 'isim')

Obje bekleyen bir fonksiyonu argüman vermeden çağırınca. Ders 3'ten hatırla: verilmeyen parametre undefined olur. Fonksiyon da undefined'ın alanını okumaya çalışır.

Ders 4: Obje: bir şampiyonun bütün bilgisi tek kutuda →

TypeError: Cannot read properties of undefined (reading 'isim') (döngüde bir fazla tur)

Olmayan bir yuvadaki objenin alanını okuyunca. En sık sebebi bir önceki karttaki <=: fazladan dönen son turda takim[i] undefined'dır ve undefined'ın alanı okunamaz. Ders 4'te tanıştığın hatanın dizideki hâli.

Ders 5: Dizi ve döngü: bütün takım →

TypeError: Cannot read properties of undefined (reading 'hp')

Takım savaşında turOyna'daki if (!takimHayattaMi(savunanlar)) { return } kontrolünü silince. Rakip takımın son canlısı turun ortasında ölürse sıradaki saldıran için hedefBul undefined döndürür ve saldir olmayan bir…

Ders 6: return ve ilk mini proje: takım savaşı →

TypeError: Cannot read properties of undefined (reading 'hp')

undefined olan bir şeyin içine bakmaya çalışınca: dizide olmayan bir sıra numarası, return'ü unutulmuş bir fonksiyonun sonucu, yanlış yazılmış bir alan adı.

Ders 8: Tekrar ve yardımsız mini sınav →

TypeError: isim.toUppercase is not a function

Metot adını yanlış yazınca. Metot adları camelCase'tir ve büyük-küçük harfe duyarlıdır: toUpperCase doğru; toUppercase, touppercase, ToUpperCase yanlış. Aynı hata Number.isNan (doğrusu isNaN) ve Math.Round (doğrusu…

Ders 9: Metinler ve sayılarla çalışmak →

TypeError: Cannot read properties of undefined (reading 'trim')

split beklediğinden az parça verince, olmayan parçanın metodunu çağırırsan. Olmayan parça undefined'dır ve undefined'ın ne alanı ne metodu vardır (Ders 5'te enYuksek.isim ile görmüştün).

Ders 9: Metinler ve sayılarla çalışmak →

TypeError [ERR_INVALID_ARG_TYPE]: The "callback" argument must be of type function. Received undefined

setTimeout'a fonksiyonu vermek yerine fonksiyonu çağırıp sonucunu verince.

Ders 10: Fonksiyonlar derinlemesine →

TypeError: Cannot read properties of undefined (reading 'hp')

find aradığını bulamayıp undefined döndürdüğünde, sonucu denetlemeden bir alanını okuyunca. undefined'ın alanı olmaz; Ders 4'te gördüğün hatanın aynısı.

Ders 11: Dizi metotları: map, filter, find, reduce →

TypeError: Reduce of empty array with no initial value

Boş bir dizide, başlangıç değeri vermeden reduce çağırınca. Başlangıç değeri yoksa reduce dizinin ilk elemanını başlangıç sayar; dizi boşsa başlayacak bir şey bulamaz.

Ders 11: Dizi metotları: map, filter, find, reduce →

TypeError: Cannot read properties of undefined (reading 'Demacia')

reduce'un callback'inde biriktiriciyi return etmeyi unutunca. İlk tur sorunsuz geçer ama hiçbir şey döndürmediği için ikinci turda biriktirici undefined olur.

Ders 11: Dizi metotları: map, filter, find, reduce →

TypeError: Cannot destructure property 'isim' of 'undefined' as it is undefined.

Parçalanacak şey undefined olduğunda. En sık hâli: objeyi parçalayan bir fonksiyonu argümansız çağırmak.

Ders 12: Obje ve dizilerde ileri teknikler →

TypeError: Cannot read properties of undefined (reading 'hp')

undefined olan bir şeyin alanını okumaya çalışınca. Sebep çoğu zaman bir önceki adımdadır: find aradığını bulamadı (Ders 11'de gördüğün durum), objede o alan yok, dizinin olmayan bir sırası istendi ya da bir…

Ders 12: Obje ve dizilerde ileri teknikler →

TypeError: ahri is not iterable

Bir objeyi for...of ile gezmeye ya da diziymiş gibi yaymaya ([...ahri]) kalkınca. Yukarıda, objenin bütün alanlarını gezmek bölümünde gördün. Dizi parçalamada da çıkar: const [ilk] = oyuncu.

Ders 12: Obje ve dizilerde ileri teknikler →

TypeError: Cannot read properties of null (reading 'ad')

null olan bir şeyin alanını okumaya çalışınca. undefined'lı hâlinin kardeşi; fark, boşluğu bu kez birinin bilerek koymuş olması.

Ders 12: Obje ve dizilerde ileri teknikler →

TypeError: Class constructor Sampiyon cannot be invoked without 'new'

Sınıfı bir fonksiyon gibi, başına new yazmadan çağırınca.

Ders 16: Sınıflar ve this →

TypeError: this.durum is not a function

Bir metodu parantezsiz olarak başka bir fonksiyona verince: setTimeout(ahri.yenidenDog, 100) gibi. Metot objesinden kopar ve this artık Ahri olmaz. Mesajdaki ad, metodun içinde neye ulaşılmaya çalışıldığına göre…

Ders 16: Sınıflar ve this →

TypeError: ahri.saldir is not a function

Bir alana, bir metotla aynı adı verince. Burada saldırı gücü this.saldir alanına konmuş. Alan objenin kendisinde, metot ise kalıpta durur; JavaScript önce objenin kendisine baktığı için alan metodu örter ve…

Ders 16: Sınıflar ve this →

TypeError: Invalid URL

new URL'e adresi protokolsüz verince. Tarayıcının adres çubuğu xdd.baby yazmana izin verir, başına https://'yi kendisi ekler; JavaScript eklemez.

Ders 18: Web nasıl çalışır? →

Uncaught TypeError: Cannot set properties of null (setting 'textContent')

querySelector öğeyi bulamayıp null verdiğinde o null'a bir şey yazmaya çalışınca. En sık sebep seçicide noktayı ya da #'yi unutmak:

Ders 22: DOM: JavaScript sayfayla konuşuyor →

Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')

Dinleyici takmak istediğin öğe null olunca. İki sebebi var: betik head'de ve defer'siz (öğe henüz yok) ya da seçici yanlış (öyle bir öğe yok).

Ders 22: DOM: JavaScript sayfayla konuşuyor →

TypeError: Cannot read properties of null (reading 'filter')

Uygulama ilk kez açıldığında. O anahtarla hiç kayıt yapılmadığı için getItem null döndürür, JSON.parse(null) da hata vermeden null verir. maclar artık bir dizi değil null'dır ve onu dizi gibi kullanan ilk satır patlar.

Ders 23: Formlar, kullanıcı girdisi ve localStorage →

TypeError: Failed to fetch

Tarayıcı kullanılabilir hiçbir cevap alamayınca: internet yoksa, alan adı yanlışsa ya da CORS izni yoksa. Node'daki karşılığı TypeError: fetch failed idi (Ders 15). Sayfamız bu hatayı yakalar ve ekrana hata durumunu…

Ders 24: Tarayıcıdan veri çekmek: fetch ve API →

TypeError: Cannot read properties of null (reading 'includes')

Bu, ekrandaki mesajın yalan söylediği bir hata. favorileriOku'yu kısa yazıp null denetimini atladığımızda tarayıcıda gerçekten olan şu oldu:

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

TypeError: Request with GET/HEAD method cannot have body.

fetch'e gövde verip method yazmayı unutunca. fetch'in varsayılan metodu GET'tir ve bir GET isteğinin gövdesi olamaz.

Ders 26: HTTP derinlemesine →

TypeError: Cannot read properties of undefined (reading 'isim')

express.json() olmadan req.body'den bir alan okumaya kalkınca. Express gövdeyi kendiliğinden okumaz; okuyacak ara katmanı eklemediysen req.body undefined kalır.

Ders 28: Express ile API →

TypeError: fetch failed ve altında ECONNREFUSED

İstek attığın adreste dinleyen bir program yokken: sahte servisi başlatmayı unuttun, Ctrl+C ile durdurdun ya da portu yanlış yazdın.

Ders 30: Dış API'lere bağlanmak →

TypeError: Cannot read properties of undefined (reading 'oturum')

app.use(cookieParser()) satırını unutunca: req.cookies hiç oluşmaz. Express isteğe 500 Internal Server Error döner ve sunucunun terminaline şunu yazar:

Ders 31: Kimlik doğrulama ve güvenlik temelleri →

TypeError: Cannot read properties of undefined (reading 'rol')

Ara katmanları ters sıraya koyunca: yoneticiGerekli, girisGerekli. yoneticiGerekli çalıştığında req.kullanici henüz yok; herkes 500 alır, yönetici bile:

Ders 31: Kimlik doğrulama ve güvenlik temelleri →

TypeError: Cannot read properties of undefined (reading 'length')

pool.query'nin önüne await yazmayı unutunca. Elindeki şey sonuç değil, henüz bitmemiş bir Promise; onun rows diye bir alanı yok (Ders 15).

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

TypeError: Reduce of empty array with no initial value (sınır durumu denenince)

reduce'a başlangıç değeri vermeden onu boş bir dizide çağırınca. İlk iki örnek doğru çıktı; boş dizi denenince program çöktü.

Ders 55: Mülakata hazırlık ve sonrası →

RangeError 6

Aralık hatası: bir değer izin verilen sınırın dışında (bitmeyen özyineleme gibi).

RangeError: Maximum call stack size exceeded

Bir setter'ın içinde, setter'la aynı adlı alana atama yapınca. Genel olarak, bir fonksiyon durmadan kendini çağırdığında.

Ders 16: Sınıflar ve this →

RangeError [ERR_SOCKET_BAD_PORT]: options.port should be >= 0 and < 65536. Received type string ('').

.env'de PORT= satırı var ama değeri boşsa. process.env.PORT undefined değil, boş metin olur; ?? yalnız null ve undefined'da devreye girdiği için 3000'e geçmez ve app.listen("") çağrılır.

Ders 29: Dosya sistemi, ortam değişkenleri ve gizli bilgiler →

AbortError 2

AbortError: signal is aborted without reason

Effect'e kumandayı ekleyip catch'teki if (kumanda.signal.aborted) denetimini unutunca. Garen'e tek bir tıklama yeter: ekranda kırmızı bir hata çıkar, oysa Garen'in ayrıntısı geldi.

Ders 42: Effect ve veri çekme →

AnthropicError 1

It looks like you're running in a browser-like environment.

SDK'yı tarayıcıda çalışan bir koda (React bileşeni, "use client" dosyası, Vite sayfası) koyup sayfayı açınca. Tarayıcı konsolunda (F12 → Console) şu mesaj çıkar; hatanın adı kullandığın derleme aracına göre…

Ders 47: Büyük dil modelleri ve ilk API isteğin →

AssertionError 2

AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

assert.strictEqual'a verdiğin iki değer === ile eşit değilken. Değerler aynı görünse bile türleri farklıysa (metin "8.00" ile sayı 8) çıkar.

Ders 53: Test yazmak ve kod kalitesi →

Test: AssertionError [ERR_ASSERTION]: Expected values to be strictly equal: NaN !== 0

kazanmaOrani'nın ilk hâlinde boş liste kontrolü yoktu. Boş listede 0 / 0 hesaplanır, sonuç NaN çıkar (Ders 9). "Maç yoksa kazanma oranı 0" testi bunu yakaladı:

Ders 55: Mülakata hazırlık ve sonrası →

AuthenticationError 1

Başvuru 1

Ön yazıda başka şirketin adı kalmış

Bir önceki başvurunun ön yazısını kopyalayıp yeni ilana uyarlarken. Şirket B'ye giden mektupta "Şirket A'nın ilanını gördüm" yazar ya da ilanda hiç geçmeyen bir teknolojiden bahsedersin. Okuyan kişi bunu ilk satırda…

Ders 54: Portföy, CV ve iş arama →

Better Auth 3

Couldn't read your auth config. Error: Cannot find module 'server-only'

Better Auth'un komut satırı aracı (npx auth@latest generate ya da migrate) ayar dosyasını okurken, o dosyanın içe aktardığı bir dosyada import "server-only" varsa.

Ders 46: Blok 6 projesi: tam yığın uygulama →

OAuth provider requires clientId

.env.local'da GITHUB_CLIENT_ID ya da GITHUB_CLIENT_SECRET boşken "GitHub ile giriş yap"a basınca. Tarayıcıda düğmenin altında "Giriş başlatılamadı" yazar; tarayıcının konsolunda (F12 → Console) 500 (Internal Server…

Ders 46: Blok 6 projesi: tam yığın uygulama →

BetterAuthError: You are using the default secret. Please set `BETTER_AUTH_SECRET` in your environment variables or pass `secret` in your auth config.

Yayında (npm run build ve npm run start, ya da Vercel) BETTER_AUTH_SECRET tanımlı değilken. Geliştirmede Better Auth eksik sırrın yerine herkesin bildiği bir varsayılan kullanır; yayında bunu reddeder. Kendi…

Ders 46: Blok 6 projesi: tam yığın uygulama →

CSS 18

Noktalı virgülü unutmak: alttaki satır da çalışmıyor

Bir bildirimin sonundaki ; unutulunca. VS Code bir alt satırdan başlayarak birkaç yerin altını kırmızıyla çizer. İlk çizginin üstüne fareyle gelince semi-colon expected ("noktalı virgül bekleniyordu") yazar;…

Ders 20: CSS temelleri: renk, yazı, kutu modeli →

Unknown property: 'backround-color'

Bir özelliğin adını yanlış yazınca: backround-color, colour, JavaScript alışkanlığıyla backgroundColor. VS Code satırın altını sarıyla çizer ve bu uyarıyı gösterir.

Ders 20: CSS temelleri: renk, yazı, kutu modeli →

display: flex kapsayıcıya değil çocuklara yazılmış

justify-content ya da gap hiçbir şey yapmıyor, öğeler alt alta duruyor. DevTools uyarısı: "The display: block property prevents justify-content from having an effect."

Ders 21: CSS yerleşim: flexbox, grid ve mobil uyum →

Kaydırınca kartlar yapışkan başlığın üstünden geçiyor

Kartlara rozet için position: relative verdiysen ve başlık sticky ise. Kartlar da başlık da konumlanmış öğedir; HTML'de sonra geldikleri için kartlar başlığın üstüne çizilir. Yukarıdaki sayfada .kart kuralına…

Ders 21: CSS yerleşim: flexbox, grid ve mobil uyum →

CV 1

PDF'ten yazı kopyalanamıyor

CV'ni bir tasarım uygulamasında ya da telefonda bir fotoğraf olarak hazırlayıp PDF'e çevirdiysen. PDF'i açınca güzel görünür ama Ctrl+A hiçbir şey seçmez ya da Not Defteri'ne boş yapıştırır. Bu PDF'in içinde yazı…

Ders 54: Portföy, CV ve iş arama →

DataError 1

DOMException [DataError]: Zero-length key is not supported

Ortam değişkenini vermeden çalıştırınca: node jwt-dene.js. process.env.JWT_SIRRI undefined olur, TextEncoder boş bir bayt dizisi üretir ve imzalama çöker.

Ders 31: Kimlik doğrulama ve güvenlik temelleri →

Erişilebilirlik 2

Odak çerçevesini kaldırmak: outline-none

İnternetteki hazır düğme örneklerinin çoğunda focus:outline-none ya da outline-none yazar: tarayıcının odak çerçevesi "çirkin" bulunup kapatılır. Dugme'deki üç focus-visible: sınıfını silip yerine outline-none…

Ders 45: Stil, erişilebilirlik ve kullanıcı deneyimi →

ESLint 2

'`' can be escaped with `&apos;`

JSX içindeki düz metne kesme işareti (') yazıp npm run lint çalıştırınca. Türkçede çok sık: Teemo'nun, Ahri'nin. Örneğin görevlerdeki yama notları sayfasına şu satırı yazınca:

Ders 43: Next.js temelleri →

Git 20

fatal: not a git repository (or any of the parent directories): .git

Git komutunu bir depo olmayan klasörde çalıştırınca. En sık sebep terminalin yanlış klasörde açık olması: örneğin C:\kod\ogren'de değil, C:\kod'dasın.

Ders 7: Hata ayıklama, Git ve GitHub →

hint: Waiting for your editor to close the file...

git commit yazıp -m "…" kısmını unutunca. Git mesajı yazman için bir düzenleyici açar ve terminal bu satırla bekler. Ders 0'da düzenleyici olarak VS Code'u seçtin; bu yüzden VS Code'da COMMIT_EDITMSG adlı bir sekme…

Ders 7: Hata ayıklama, Git ve GitHub →

error: remote origin already exists.

git remote add origin … komutunu ikinci kez çalıştırınca. Örneğin adresi yanlış yazıp düzeltmek için komutu tekrarlarken.

Ders 7: Hata ayıklama, Git ve GitHub →

fatal: repository '…' not found

Gönderdiğin adreste GitHub'da bir depo yoksa. En sık sebepler: adresteki kullanıcı adını ya da depo adını yanlış yazmak (ogren yerine ogrne) ya da depoyu GitHub'da hiç açmamış olmak.

Ders 7: Hata ayıklama, Git ve GitHub →

error: src refspec main does not match any

Dalının adı hâlâ master'ken git push -u origin main yazınca. Depoda hiç commit yokken push etmeye çalışınca da çıkar.

Ders 7: Hata ayıklama, Git ve GitHub →

fatal: The current branch main has no upstream branch.

Uzak depoyu ekledikten sonra ilk gönderimde -u origin main kısmını yazmayıp yalnızca git push yazınca. Git, main dalını nereye göndereceğini henüz bilmiyor.

Ders 7: Hata ayıklama, Git ve GitHub →

! [rejected] main -> main (fetch first)

GitHub'da depoyu açarken README (ya da .gitignore, lisans) eklediysen. GitHub'daki depoda senin bilgisayarında olmayan bir commit vardır; Git onu silmemek için push'u reddeder.

Ders 7: Hata ayıklama, Git ve GitHub →

fatal: Need to specify how to reconcile divergent branches.

Senin dalın ve uzaktaki dal ayrışmışken (ikisinde de öbüründe olmayan commit varken) git pull yazınca, Git'e bu durumda ne yapacağı hiç söylenmemişse. Windows için Git kurulumu bu ayarı varsayılan olarak yapar;…

Ders 52: Takım çalışması: Git dalları ve pull request →

fatal: refusing to merge unrelated histories

Depoyu GitHub'da README ile açtıktan sonra kendi bilgisayarında ayrı bir depo başlattıysan (git init, commit, git remote add). İki depo aynı adı taşısa da ortak bir commit'leri yoktur. Önce push reddedilir (Ders…

Ders 54: Portföy, CV ve iş arama →

Geçmişte kalan .env dosyası

Portföyünü herkese açmadan önce depolarını tararken. .env'yi bir ara yanlışlıkla commit'leyip sonra silmiş olabilirsin. Dosya bugün depoda yok ama geçmişte duruyor ve herkese açık bir depoda herkes onu okuyabilir:

Ders 54: Portföy, CV ve iş arama →

GitHub 2

Profil README'si profilde görünmüyor

Depoyu açtın, README'yi yazdın ama github.com/kullaniciadin sayfasında hiçbir şey değişmedi. Hata mesajı yok; GitHub şartlardan biri tutmayınca sessizce göstermez. En sık sebepler:

Ders 54: Portföy, CV ve iş arama →

README'deki resim GitHub'da kırık görünüyor

VS Code önizlemesinde ekran görüntüsü görünüyor, GitHub'da ise yerinde yalnız alt metin ya da kırık resim simgesi var. Hata mesajı yok. En sık sebep büyük-küçük harf: Windows Ekran.PNG ile ekran.png'yi aynı dosya…

Ders 54: Portföy, CV ve iş arama →

HTML 10

Error: The value of the for attribute of the label element must be the ID of a non-hidden form control.

label'ın for'u hiçbir kutunun id'sine uymayınca. Sayfa açılır ama yazıya tıklamak kutuyu seçmez, ekran okuyucu da kutunun adını bilmez.

Ders 19: HTML: sayfanın iskeleti →

Error: The heading h3 (with computed level 3) follows the heading h1 (with computed level 1), skipping 1 heading level.

Başlık düzeyini atlayınca, çoğu zaman h2 "çok büyük göründüğü" için h3 seçince.

Ders 19: HTML: sayfanın iskeleti →

Error: Element head is missing a required instance of child element title.

head içine title yazmayınca. Sekmede sayfanın adı yerine dosyanın adı ya da adresi görünür.

Ders 19: HTML: sayfanın iskeleti →

Error: The character encoding was not declared. Proceeding using windows-1252.

satırı olmayan bir dosyayı doğrulayıcıya file upload ile yükleyince. Doğrulayıcı kodlamayı bilmediği için eski bir Batı Avrupa tablosu (windows-1252) kullandığını söylüyor; o tabloda Türkçe harfler bozulur.

Ders 19: HTML: sayfanın iskeleti →

Bağlantı başka siteye değil, kendi klasörüne gidiyor (ERR_FILE_NOT_FOUND)

Başka bir sitenin adresini https:// olmadan yazınca. Doğrulayıcı bunu hata saymaz, çünkü www.leagueoflegends.com geçerli bir göreli yoldur: "bu klasördeki www.leagueoflegends.com adlı dosya".

Ders 19: HTML: sayfanın iskeleti →

İki seçenek düğmesi birden seçilebiliyor

Aynı gruba ait seçenek düğmelerine farklı name verince. Doğrulayıcı bunu hata saymaz, ama tarayıcı her name'i ayrı bir grup sanır ve "Orta" ile "Alt" aynı anda seçili kalır.

Ders 19: HTML: sayfanın iskeleti →

HTTP 11

405 METHOD NOT ALLOWED: adres bu metodu kabul etmiyor

Bir adrese, onun kabul etmediği bir metotla istek atınca. httpbin'in /post adresi yalnızca POST kabul eder; curl ise -X vermezsen GET gönderir:

Ders 26: HTTP derinlemesine →

Content-Type unutulunca "json": null: gövde form'a düşmüş

curl'e -d ile gövde verip -H "Content-Type: application/json" yazmayı unutunca. curl o zaman gövdeyi bir HTML formu gibi işaretler:

Ders 26: HTTP derinlemesine →

curl: (6) Could not resolve host

Alan adını yanlış yazınca ya da internet bağlantın yokken. curl alan adını IP adresine çeviremedi (Ders 18'deki DNS); istek hiç gitmediği için durum kodu da yok.

Ders 26: HTTP derinlemesine →

{ status: { message: 'Unknown apikey', status_code: 401 } }

Riot anahtarını tanımayınca: anahtarı eksik kopyaladın, geliştirici anahtarının 24 saati doldu ya da yeniledikten sonra .env'i güncellemedin. Çıktısını hemen yukarıda gördün.

Ders 30: Dış API'lere bağlanmak →

{ status: { message: 'Forbidden', status_code: 401 } }: anahtar yerine undefined gitti

--env-file=.env yazmadan çalıştırınca. .env okunmaz, process.env.RIOT_API_KEY undefined olur ve fetch başlığa undefined sözcüğünü yazar.

Ders 30: Dış API'lere bağlanmak →

Cannot process request apikey or authorization header is empty

Başlık hiç gitmeyince. En sık sebep headers yerine header yazmak: fetch tanımadığı ayarı hata vermeden yok sayar.

Ders 30: Dış API'lere bağlanmak →

DisServisHatasi: 429 {"hata":"Çok sık istek attın"}

Servisin hız sınırını aşınca ve yeniden denerken Retry-After'ın söylediğinden kısa bekleyince. Şu anki yenidenDene tam olarak bunu yapıyor:

Ders 30: Dış API'lere bağlanmak →

Çerez geliyor ama sonraki isteklerde geri gönderilmiyor

Secure çerezi https de localhost da olmayan bir adreste kullanınca. En sık hâli: siteyi telefondan denemek için bilgisayarın ağ adresiyle açmak (http://192.168.1.108:3000). Giriş 200 döner, sonraki her istek 401…

Ders 31: Kimlik doğrulama ve güvenlik temelleri →

InternalServerError 1

InvalidCharacterError 1

JavaScript 1

Türkçe tarih biçimi: Invalid Date

Tarihi alışkın olduğun gibi 28.09.2026 diye yazınca. JavaScript bu biçimi tanımaz; hata da vermez. Daha kötüsü, bazen yanlış tanır:

Ders 54: Portföy, CV ve iş arama →

Next.js 17

Yanlış klasör ya da dosya adı: 404

Adresle klasör adı birebir tutmayınca ya da sayfa dosyasının adı page.tsx olmayınca. Türkçe klavyede en sık yapılan: klasörü alışkanlıkla hakkında diye (ı ile) açmak. Adres çubuğuna /hakkinda yazarsın, klasörün adı…

Ders 43: Next.js temelleri →

The default export is not a React Component in "/hakkinda/page"

page.tsx'te export default yazmayı unutunca. Örneğin Ders 40'taki adlı dışa aktarma alışkanlığıyla export function Hakkinda() yazınca. Sayfa yerine hata katmanı açılır, terminalde:

Ders 43: Next.js temelleri →

You're importing a module that depends on `useState` into a React Server Component module.

useState, useEffect gibi bir hook kullanan bir bileşeni "use client" yazmadan bir sayfada kullanınca. Terminalde de aynısı:

Ders 43: Next.js temelleri →

Event handlers cannot be passed to Client Component props.

Bir sunucu bileşeninde bir öğeye onClick gibi bir olay işleyicisi verince. Örneğin şampiyon sayfasına doğrudan console.log("Paylaşıldı")}>Paylaş yazınca. Sayfa 500 verir, terminalde:

Ders 43: Next.js temelleri →

You are attempting to export "metadata" from a component marked with "use client"

"use client" yazan bir dosyadan metadata dışa aktarınca. Örneğin bir sayfanın tamamını istemci bileşeni yapıp ona başlık vermeye çalışınca.

Ders 43: Next.js temelleri →

Image with src "/kapak.png" is missing required "width" property.

Image'e width ve height vermeyince. Sayfa 500 verir, terminalde:

Ders 43: Next.js temelleri →

hostname "ddragon.leagueoflegends.com" is not configured under images in your `next.config.js`

Image'e başka bir siteden resim verip o siteyi next.config.ts'te tanıtmayınca.

Ders 43: Next.js temelleri →

Another next dev server is already running.

Aynı proje klasöründe ikinci bir geliştirme sunucusu açmaya çalışınca. Çoğu zaman öteki terminalde unuttuğun bir npm run dev açıktır. Sunucu 3000'de açıkken ikinci terminalde npx next dev -p 3001 dediğimizde:

Ders 43: Next.js temelleri →

DATABASE_URL tanımlı değil: .env.local dosyası proje kökünde mi?

.env.local yoksa, yanlış klasördeyse (ör. app içinde) ya da içindeki ad farklı yazılmışsa (DATABSE_URL). Bu mesajı biz yazdık; lib/db.ts'in ilk denetimi çalıştı. Sayfa 500 verir, terminalde:

Ders 44: Next.js ile tam yığın (full-stack) →

Detected lowercase method 'get' in '[project]/app/api/sampiyonlar/route.ts'.

route.ts'teki fonksiyonun adını küçük harfle (get) yazınca ya da onu export default ile dışa aktarınca. Tarayıcıda ya da curl.exe'de yalnız 405 Method Not Allowed görürsün; sebebi terminalde:

Ders 44: Next.js ile tam yığın (full-stack) →

It is not allowed to define inline "use server" annotated Server Actions in Client Components.

Bir istemci bileşeninin ("use client" yazan dosyanın) içinde "use server" ile bir fonksiyon tanımlayınca. Bunu bir deneme sayfasında yaptık: app/deneme/HizliEkle.tsx istemci bileşeni, içindeki ekle fonksiyonunun ilk…

Ders 44: Next.js ile tam yığın (full-stack) →

Yayında eski veri: revalidatePath unutuldu

Bir Server Action ya da Route Handler veritabanını değiştirdiği hâlde, o veriyi gösteren statik (○) sayfayı yeniden doğrulamayınca. Hata mesajı yoktur; yalnız yanlış ekran vardır. Geliştirmede görünmez, çünkü npm run…

Ders 44: Next.js ile tam yığın (full-stack) →

A "use server" file can only export async functions, found object.

"use server" yazan bir dosyadan async fonksiyon dışında bir şey dışa aktarınca. Şemayı "nasılsa formla ilgili" diye actions.ts'e koyup export const ile dışa aktardığımızda sayfa açıldı ama form gönderilince 500 geldi:

Ders 44: Next.js ile tam yığın (full-stack) →

İstemci bileşeninde sunucu sırrı: undefined ve Hydration failed

"use client" yazan bir dosyada NEXT_PUBLIC_ ile başlamayan bir ortam değişkeni okununca. Tarayıcıda değer undefined'dır; konsolda Hydration failed because the server rendered text didn't match the client. çıkar,…

Ders 44: Next.js ile tam yığın (full-stack) →

'server-only' cannot be imported from a Client Component module

Başında import "server-only" yazan bir dosyayı (ya da onu içe aktaran bir dosyayı) bir istemci bileşenine aktarınca. Sayfa 500 verir, terminal aynı şeyi birkaç kez söyler; en açık olanı:

Ders 44: Next.js ile tam yığın (full-stack) →

Error occurred prerendering page "/sampiyonlar".

npm run build sırasında veritabanına ulaşılamayınca. Statik (○) bir sayfa derlemede çizildiği için sorgusu da derlemede çalışır; bağlantı dizesi yoksa, yanlışsa ya da internet yoksa derleme durur. Bozuk sunucu adıyla…

Ders 44: Next.js ile tam yığın (full-stack) →

Failed to collect page data ve DATABASE_URL tanımlı değil

Vercel'de DATABASE_URL girilmeden yayın başlatılınca. Derleme, sayfaların ayarlarını toplarken lib/db.ts'i yükler; dosyanın ilk denetimi hata fırlatır ve derleme durur. Bilgisayarımızda .env.local'dan satırı silerek…

Ders 46: Blok 6 projesi: tam yığın uygulama →

NotFoundError 1

NotFoundError: 404 not_found_error

Model adını yanlış yazınca. En sık yanlış, sürümdeki tireyi noktayla yazmak: claude-opus-5.5. TypeScript bunu yakalayamaz, çünkü SDK yeni modeller çıkabilsin diye model alanına her metni kabul eder.

Ders 47: Büyük dil modelleri ve ilk API isteğin →

npm 3

'vite' is not recognized as an internal or external command

Projeyi oluşturup npm install'u atlayınca, ya da projeyi başka bir bilgisayara kopyalayıp (node_modules Git'e girmediği için yanında gelmez) kurmadan çalıştırınca.

Ders 40: React'e giriş: bileşenler ve JSX →

OAuth 1

redirect_uri_mismatch

Giriş isteğindeki geri dönüş adresi GitHub'a kaydettiğinle birebir aynı değilse. En sık sebepler: canlı adresi GitHub'a eklemeyi unutmak, BETTER_AUTH_URL'i yanlış yazmak (https yerine http, sonda fazladan /),…

Ders 46: Blok 6 projesi: tam yığın uygulama →

Oxlint 2

React Hook useEffect has missing dependencies: 'id', and 'surum'

Effect'in içinde kullandığın bir prop'u ya da state'i bağımlılık dizisine yazmayınca. SampiyonDetay'deki diziyi [] yaparsan ilk tıkladığın şampiyon ekranda kalır: Garen'den sonra Jinx'e tıklarsın, listede Jinx seçili…

Ders 42: Effect ve veri çekme →

React hook useEffect depends on `ayar`, which changes every render

Bileşenin gövdesinde kurulan bir objeyi ya da diziyi bağımlılık dizisine yazınca. Yukarıdaki bileşende ekranda doğru sürüm sayısı yazar ve React hiçbir uyarı vermez, ama Console'da istek gönderiliyor durmadan artar…

Ders 42: Effect ve veri çekme →

PowerShell 11

curl yazınca Supply values for the following parameters ya da Security Warning çıkıyor

Windows'la gelen PowerShell'de (sürüm 5.1) komutu .exe olmadan, yalnızca curl diye yazınca. Bu PowerShell'de curl, gerçek curl programının değil, PowerShell'in kendi Invoke-WebRequest komutunun takma adıdır (alias):…

Ders 26: HTTP derinlemesine →

JSON'u komutun içine yazınca tırnaklar kayboluyor (PowerShell 5.1)

Gövdeyi dosyaya koymak yerine komutun içine yazınca. Windows'la gelen PowerShell 5.1, dışarıdaki bir programa (curl.exe gibi) metin verirken metnin içindeki çift tırnakları yutar:

Ders 26: HTTP derinlemesine →

The splatting operator '@' cannot be used to reference variables in an expression

Dosyadan gövde gönderirken @ahri.json'ı tırnaksız yazınca. İnternetteki curl örnekleri genelde böyle yazılır, ama @ bir sözcüğün başındaysa PowerShell onu kendi özel işareti sanır:

Ders 26: HTTP derinlemesine →

The remote server returned an error: (404) Not Found. / Uzak sunucu hata döndürdü: (404) Bulunamadı.

Invoke-RestMethod ya da Invoke-WebRequest 4xx ya da 5xx bir yanıt alınca ve yanıtın gövdesi boşsa. İlk satır Windows'un diline göre değişir. Türkçe Windows'ta:

Ders 26: HTTP derinlemesine →

Türkçe harfler bozuluyor: Demacia'nın Kudreti, Işık yerine Isik

Windows PowerShell 5.1'in web komutlarıyla Türkçe metin alırken ya da gönderirken. İki yönde de olur.

Ders 26: HTTP derinlemesine →

The ampersand (&) character is not allowed

İçinde & olan bir adresi tırnaksız yazınca. & PowerShell'de özel bir işarettir; adresin parçası sayılmaz:

Ders 26: HTTP derinlemesine →

İnternetten kopyalanan çok satırlı curl komutu: -H : The term '-H' is not recognized

API belgelerindeki örnekler çoğu zaman Linux ve macOS'un kabuğu bash için yazılır ve uzun komutu satır sonundaki \ ile böler. PowerShell \'i "komut alt satırda sürüyor" diye anlamaz. Böyle bir örneği terminale…

Ders 26: HTTP derinlemesine →

Sunucu {isim: Teemo} aldı: tırnaklar nerede?

Windows 11 ile gelen Windows PowerShell 5.1'de, tırnaklı JSON'u curl.exe'nin komut satırına doğrudan yazınca. PowerShell 5.1, curl.exe gibi dış programlara argüman verirken içteki çift tırnakları siler. Bu, Ders…

Ders 27: Node.js ile ilk sunucu →

Select-Object boş bir tablo veriyor

Windows PowerShell 5.1'de Invoke-RestMethod'un döndürdüğü bir JSON dizisini parantezsiz olarak | ile başka bir komuta verince. Aşağıdaki komut, yukarıdakinin parantezsiz hâli: Invoke-RestMethod…

Ders 32: Yayına alma ve Blok 4 projesi: takım API'si →

The term 'tsc' is not recognized

npx'i unutup yalnız tsc yazınca. TypeScript'i bilgisayarın geneline değil, projeye kurdun; tsc komutu yalnız projenin node_modules klasöründe var.

Ders 39: TypeScript: tiplerle güvenli kod →

React 15

Objects are not valid as a React child

{ } içine bir objeyi olduğu gibi koyunca. React metni, sayıyı ve JSX'i çizebilir; bir objenin ekranda neye benzeyeceğini bilemez. Dene: App.tsx'te sampiyonSayisi yerine bir obje tut ve onu paragrafa koy.

Ders 40: React'e giriş: bileşenler ve JSX →

<sampiyonKarti /> is using incorrect casing

Bileşenin adını küçük harfle yazınca. Dene: App.tsx'te içe aktarma satırını import sampiyonKarti from "./SampiyonKarti" yap ve etiketleri diye yaz. Kartlar kaybolur, hata katmanı çıkmaz. Konsolda:

Ders 40: React'e giriş: bileşenler ve JSX →

does not provide an export named 'default'

Bileşen dosyasında export default yerine yalnız export yazıp öteki dosyada süslü parantezsiz içe aktarınca (ya da export'u hiç yazmayınca). Dene: SampiyonKarti.tsx'te default sözcüğünü sil ve kaydet. Kartlar ekranda…

Ders 40: React'e giriş: bileşenler ve JSX →

Ekranda tek başına bir 0 çıkıyor

&&'nin solunda bir sayı varken. Diyelim ki başlığın altına "bu hafta kaç şampiyon ücretsiz" satırını, yalnız ücretsiz şampiyon varsa göstermek istedin ve App.tsx'te 'in hemen altına şu satırı ekledin:

Ders 40: React'e giriş: bileşenler ve JSX →

Too many re-renders. React limits the number of renders to prevent an infinite loop.

Olay işleyiciye fonksiyonu değil, fonksiyonun çağrısını verince ve o fonksiyon state değiştiriyorsa.

Ders 41: State ve olaylar →

Encountered two children with the same key

Listede iki öğeye aynı key verince. Takım listesinde key={birim.ad} yazıp Garen'i iki kez eklersen:

Ders 41: State ve olaylar →

A component is changing an uncontrolled input to be controlled.

State'i başlangıç değeri vermeden açıp kutuya value olarak verince: useState(). İlk çizimde değer undefined'dır; React bu kutuyu kontrolsüz sanar. İlk harfi yazınca değer metne döner ve React itiraz eder:

Ders 41: State ve olaylar →

Saat iki kat hızlı ve gizleyince durmuyor

Zamanlayıcı ya da olay dinleyicisi kuran bir effect'ten temizlik fonksiyonu döndürmeyince. Hata mesajı yoktur. Belirtiler: geliştirmede her şey iki kat hızlı (StrictMode iki kez kurar), bileşeni gizleyince Console'da…

Ders 42: Effect ve veri çekme →

useEffect must not return anything besides a function, which is used for clean-up.

Effect'in kendisini async yazınca. Kısa göründüğü için akla ilk gelen yazılış budur:

Ders 42: Effect ve veri çekme →

Maximum update depth exceeded.

Bir effect state'i değiştiriyor ve o değişiklik effect'in yeniden çalışmasına yol açıyorsa: ya effect'in bağımlılık dizisi yoktur ya da dizideki bir değer her çizimde değişir.

Ders 42: Effect ve veri çekme →

Hata mesajı çıkınca yazdıkların siliniyor

useActionState'li bir formda Server Action yalnız { hatalar } döndürüp kullanıcının yazdıklarını geri vermeyince. Hatalar doğru görünür ama bütün kutular boşalmıştır: React, formun eylemi bittikten sonra formu…

Ders 44: Next.js ile tam yığın (full-stack) →

SQL 54

column "Ahri" does not exist

Metni JavaScript alışkanlığıyla çift tırnakla yazınca. SQL'de çift tırnak metin değil, ad (tablo ya da sütun adı) demektir; Postgres Ahri adında bir sütun arar, bulamaz.

Ders 33: Veritabanı nedir? PostgreSQL'e giriş →

INSERT has more expressions than target columns

Ondalık sayıyı Türkçe alışkanlıkla virgülle yazınca. 51,61 Postgres için iki ayrı değerdir: 51 ve 61. Değer sayısı sütun sayısını geçer.

Ders 33: Veritabanı nedir? PostgreSQL'e giriş →

Gün ile ay yer değiştirdi (hata mesajı yok)

Tarihi 09.10.2026 gibi gün.ay.yıl sırasıyla yazınca. Postgres bu biçimi varsayılan olarak ay.gün.yıl diye okur. Gün 12'den büyükse hata verir ('25.10.2026' için date/time field value out of range), değilse sessizce…

Ders 33: Veritabanı nedir? PostgreSQL'e giriş →

column "macsayisi" of relation "sampiyon_havuzu" does not exist

Sütun adını JavaScript alışkanlığıyla camelCase yazınca. Mesajdaki adın küçük harfe dönmüş olduğuna dikkat et: Postgres tırnaksız adı macsayisi'ye çevirdi ve öyle bir sütun bulamadı.

Ders 33: Veritabanı nedir? PostgreSQL'e giriş →

duplicate key value violates unique constraint "…_pkey"

Birincil anahtar sütununa tabloda zaten olan bir değeri yazınca. Birincil anahtar bölümünde şampiyon adını anahtar yaptığında gördün. DETAIL satırı hangi değerin zaten olduğunu söyler: Key (sampiyon)=(Ahri) already…

Ders 33: Veritabanı nedir? PostgreSQL'e giriş →

null value in column "…" violates not-null constraint

Boş olamayan bir sütunu (birincil anahtar gibi) INSERT'te yazmayınca ya da ona NULL verince. Yazmadığın her sütuna NULL konur. DETAIL satırı reddedilen satırın tamamını gösterir: Failing row contains (null, Orman).

Ders 33: Veritabanı nedir? PostgreSQL'e giriş →

column "Ahri" does not exist

WHERE koşulunda metni çift tırnakla yazınca. SQL'de çift tırnak bir ad (sütun ya da tablo adı) demektir; PostgreSQL Ahri adında bir sütun arar, bulamaz.

Ders 34: SELECT: veriyi sorgulamak →

WHERE rol = NULL hiç satır döndürmüyor

Boş (NULL) değerleri = ile aramaya kalkınca. Hata mesajı yok; sorgu çalışır ve boş bir tablo döner. Bu yüzden fark etmesi zordur.

Ders 34: SELECT: veriyi sorgulamak →

division by zero

Bir sütuna bölerken o sütunda 0 olan bir satır varsa. Ece, Ashe maçında hiç ölmemiş (olum 0); her maçın KDA'sını hesaplamaya kalkınca sorgu o satırda durur. JavaScript sıfıra bölünce Infinity veriyordu (Ders 1);…

Ders 34: SELECT: veriyi sorgulamak →

column "maclar.rol" must appear in the GROUP BY clause or be used in an aggregate function

Gruplarken SELECT'e, grupta tek bir değeri olmayan bir sütun yazınca. Jinx'in dört maçı var ve rolleri farklı (alt ve boş); PostgreSQL Jinx satırına hangisini yazacağını bilemez.

Ders 34: SELECT: veriyi sorgulamak →

column "katki" does not exist

SELECT'te verdiğin takma adı WHERE'de (ya da HAVING'de) kullanınca. WHERE çalışırken katki adı henüz verilmemiştir.

Ders 34: SELECT: veriyi sorgulamak →

check constraint "hesaplar_altin_check" of relation "hesaplar" is violated by some row

Dolu bir tabloya ALTER TABLE … ADD CHECK ile kural eklerken, tabloda kurala uymayan en az bir satır varsa. ALTER TABLE bölümünde eksi altınlı hesap yüzünden gördün.

Ders 35: Veriyi değiştirmek ve tablo tasarımı →

Komut hatasız bitti ama hiçbir şey değişmedi

UPDATE ya da DELETE'in WHERE'i hiçbir satırı tutmayınca: 'Ahri' yerine 'ahri' yazmak, fazladan bir boşluk, yanlış bir id. Postgres bunu hata saymaz; "sıfır satırı değiştirdim" der ve geçer.

Ders 35: Veriyi değiştirmek ve tablo tasarımı →

insert or update on table "maclar" violates foreign key constraint "maclar_oyuncu_id_fkey"

Yabancı anahtar sütununa, gösterdiği tabloda olmayan bir değer yazınca. 99 numaralı bir oyuncu yok:

Ders 36: İlişkiler ve JOIN →

update or delete on table "oyuncular" violates foreign key constraint "maclar_oyuncu_id_fkey" on table "maclar"

Başka bir tablodaki satırların gösterdiği bir satırı silmeye çalışınca. Deniz'in dört maçı var; Deniz silinseydi o maçlar var olmayan bir oyuncuyu gösterirdi.

Ders 36: İlişkiler ve JOIN →

column reference "id" is ambiguous

İki tabloda da bulunan bir sütunun adını, hangi tablodan geldiğini söylemeden yazınca. id hem maclar'da hem oyuncular'da var:

Ders 36: İlişkiler ve JOIN →

invalid reference to FROM-clause entry for table "maclar"

Bir tabloya takma ad verdikten sonra, aynı sorguda tablonun asıl adını kullanınca.

Ders 36: İlişkiler ve JOIN →

LEFT JOIN'i WHERE ile farkında olmadan INNER JOIN'e çevirmek

LEFT JOIN'den sonra, sağdaki tablonun bir sütununa WHERE ile koşul koyunca. Amaç "her oyuncunun zaferleri, zaferi olmayanlar da görünsün":

Ders 36: İlişkiler ve JOIN →

LEFT JOIN'de COUNT(*) maçsız oyuncuya 1 yazıyor

Maçı olmayanları da göstermek için LEFT JOIN yapıp satırları COUNT(*) ile sayınca:

Ders 36: İlişkiler ve JOIN →

update or delete on table "sampiyonlar" violates RESTRICT setting of foreign key constraint "takim_sampiyonlari_sampiyon_id_fkey" on table "takim_sampiyonlari"

ON DELETE RESTRICT ile korunan bir satırı silmeye çalışınca. Jinx iki kadroda kullanılıyor:

Ders 36: İlişkiler ve JOIN →

cannot drop table oyuncular because other objects depend on it

Başka tabloların yabancı anahtarlarla gösterdiği bir tabloyu silmeye çalışınca.

Ders 36: İlişkiler ve JOIN →

foreign key constraint "yorumlar_oyuncu_id_fkey" cannot be implemented

Yabancı anahtar sütununun tipi, gösterdiği sütunun tipinden farklıysa.

Ders 36: İlişkiler ve JOIN →

there is no unique constraint matching given keys for referenced table "oyuncular"

REFERENCES ile birincil anahtar ya da UNIQUE olmayan bir sütunu göstermeye çalışınca. bolge sütununda aynı değer birçok satırda var:

Ders 36: İlişkiler ve JOIN →

invalid input syntax for type integer: "abc"

Sayı bekleyen bir sütunu, sayıya çevrilemeyen bir değerle sorgulayınca. Adres /oyuncular/abc olunca $1 "abc" olur ve Postgres onu integer'a çeviremez. Henüz hata yakalayıcın olmadığı için Express kendi varsayılan…

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

duplicate key value violates unique constraint "takim_sampiyonlari_pkey"

Ara tabloya aynı takım–şampiyon çiftini ikinci kez eklemeye kalkınca. Burada sebep veride: 9 numaralı takımın listesi ["Jinx", "Ahri", "Jinx"]. Ayrıntı satırı hangi çiftin tekrar ettiğini söylüyor: 9 numaralı takım,…

Ders 38: Blok 5 projesi: veritabanlı API →

409 aldım ama böyle bir takım yok: duplicate key value violates unique constraint "takimlar_pkey"

Eski numaralarla taşınan bir tabloya, sayaç ileri sarılmadan yeni satır eklenince. İlk denemede Key (id)=(1) already exists alırsın; aynı isteği tekrarladıkça 2, 3 diye ilerler, çünkü her başarısız deneme sayaçtan…

Ders 38: Blok 5 projesi: veritabanlı API →

argument of LIMIT must be type bigint, not type text

Sorguya yeni bir parametre ekleyip öbürlerinin numaralarını kaydırmayı unutunca. Burada WHERE t.ad ILIKE $1 eklendi, ama sorgunun sonunda hâlâ LIMIT $1 OFFSET $2 yazıyor:

Ders 38: Blok 5 projesi: veritabanlı API →

Büyük harfle arama boş dönüyor: ?ara=AVCI

Türkçe bir adı, içinde I olan büyük harflerle arayınca. Ders 32'deki API ?ara=AVCI ile Baron Avcıları'nı buluyordu; ILIKE'lı sürüm bulamıyor. Hata mesajı yok, liste boş:

Ders 38: Blok 5 projesi: veritabanlı API →

relation "kullanicilar" does not exist

notlar'ı, bağlı olduğu kullanicilar tablosundan önce kurmaya çalışınca: yalnız dosyanın sonunu seçip çalıştırdıysan ya da notlar'ı dosyanın başına yazdıysan. Boş bir veritabanında denedik:

Ders 46: Blok 6 projesi: tam yığın uygulama →

type "vector" does not exist

Uzantıyı o veritabanında açmadan vector tipinde bir sütun kurunca. Çoğu zaman uzantıyı başka bir veritabanında açtığın için olur: alıştırma veritabanında açıp uygulamanınkinde unutmak gibi.

Ders 51: Kendi verinle yapay zekâ ve Blok 7 projesi →

expected 2 dimensions, not 3

Sütunun boyutuyla uyuşmayan uzunlukta bir vektör yazınca. Gerçek projede en sık sebebi, gömme modelini ya da boyut ayarını değiştirip tabloyu değiştirmemek: vector(1024) sütununa 2.048 sayılık bir gömme yazarsan…

Ders 51: Kendi verinle yapay zekâ ve Blok 7 projesi →

Sunucu 20

curl: (7) Failed to connect to localhost:3000

Sunucu çalışmıyorken istek atınca: başlatmayı unuttun, Ctrl+C ile durdurdun, sunucu bir hatayla çöktü ya da port numarasını yanlış yazdın.

Ders 27: Node.js ile ilk sunucu →

Error: listen EADDRINUSE: address already in use :::3000

3000 numaralı kapıyı başka bir program dinlerken sunucuyu bir kez daha başlatınca. En sık sebep: sunucu başka bir terminalde hâlâ çalışıyor. VS Code'da terminal panelini X ile kapatmak sunucuyu durdurmaz, paneli…

Ders 27: Node.js ile ilk sunucu →

İstek hiç bitmiyor: res.end unutuldu

Bir dalda yanıtı göndermeyi unutunca. Fonksiyonlardan değer döndürmeye alıştığın için eline ilk gelen return olabilir; ama Node, createServer'a verdiğin fonksiyonun döndürdüğü değere hiç bakmaz.

Ders 27: Node.js ile ilk sunucu →

Türkçe harfler bozuk: Büyücü, hoÅŸ

JSON'u Content-Type başlığı olmadan gönderince ya da başlığa charset=utf-8 yazmayınca.

Ders 27: Node.js ile ilk sunucu →

Error [ERR_HTTP_HEADERS_SENT]: Cannot write headers after they are sent to the client

Aynı isteğe ikinci kez yanıt yazmaya çalışınca. En sık sebep: hata yanıtını gönderdikten sonra return yazmayı unutmak. Fonksiyon çalışmaya devam eder ve bir yanıt daha göndermeye kalkar.

Ders 27: Node.js ile ilk sunucu →

Cannot GET /yok

Metot ve yol ikilisine uyan bir route olmadığında. Kendi 404'ünü yazana kadar Express bu küçük HTML sayfasını gönderir.

Ders 28: Express ile API →

Sunucu "çalışıyor" diyor ama istekleri eski bir sunucu karşılıyor

3000 numaralı kapıyı başka bir program, örneğin hâlâ açık duran Ders 27 sunucun dinlerken. Ders 27'de node:http bu durumda EADDRINUSE ile çöküyordu. Express 5 ise hatayı app.listen'a verdiğin fonksiyona iletir.…

Ders 28: Express ile API →

Var olan şampiyon da 404 alıyor: metni sayıyla karşılaştırmak

req.params.id'yi sayıya çevirmeden === ile karşılaştırınca. Hata mesajı yok; sunucu "çalışıyor", ama hiçbir id'yi bulamıyor.

Ders 28: Express ile API →

İstek hiç bitmiyor: ara katmanda next() unutuldu

Bir ara katman ne yanıt gönderir ne de next() derse. İstek o halkada takılı kalır; arkasındaki route'lar hiç çalışmaz.

Ders 28: Express ile API →

GET /api/sampiyonlar/yeni 400 alıyor: route sırası

Sabit bir yolu (/yeni), aynı yeri tutan bir yol parametresinin (/:id) altına yazınca. Diyelim ki son eklenen şampiyonu getiren bir uç nokta yazdın ve onu dosyanın sonuna, app.listen'ın üstüne ekledin:

Ders 28: Express ile API →

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Bir isteğe yanıt gönderdikten sonra ikinci kez göndermeye kalkınca. En sık sebep: 400'ü gönderen satırdaki return'ü unutmak.

Ders 28: Express ile API →

PathError [TypeError]: Missing parameter name at index 1: *

İnternetteki Express 4 örneklerinde 404 için sık görülen app.get("", ...), app.all("", ...) ya da app.use("*", ...) satırını Express 5'e yazınca. Sunucu daha açılmadan çöker:

Ders 28: Express ile API →

Error: ENOENT: no such file or directory, open 'C:\kod\veri.json'

Kodda göreli bir dosya yolu varken (readFile("veri.json")) programı proje klasörünün dışından başlatınca. Aşağıda sunucuyu C:\kod klasöründeyken node takim-api\sunucu.js ile başlattık, sonra bir istek attık. Sunucu…

Ders 32: Yayına alma ve Blok 4 projesi: takım API'si →

Sunucu "çalışıyor" yazıp kapanıyor

Express 5'te app.listen'a verilen fonksiyon, port açılamazsa da çağrılır; hata ilk parametre olarak gelir. Hatayı hiç denetlemezsen program "çalışıyor" yazar ve sessizce kapanır. En sık sebep: sunucu başka bir…

Ders 32: Yayına alma ve Blok 4 projesi: takım API'si →

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'express' imported from C:\kod\prova\sunucu.js

Paketler kurulmamışken programı başlatınca. node_modules Git'e girmez (Ders 14); klonlanan her kopyada paketler yeniden kurulmalıdır. Barındırıcıda bu hatayı görüyorsan derleme komutu (Build Command) boştur ya da npm…

Ders 32: Yayına alma ve Blok 4 projesi: takım API'si →

Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\kod\prova\dogrula.js' imported from C:\kod\prova\sunucu.js

import ile çağrılan bir dosya klonda yokken. İki sebebi var. Birincisi, dosya hiç commit'lenmemiştir: senin klasöründe durur, GitHub'da yoktur.

Ders 32: Yayına alma ve Blok 4 projesi: takım API'si →

npm error Missing script: "start"

Render'ın Start Command'ı npm start iken package.json'da start betiği yoksa. Yayın Deploys sayfasında başarısız olur, sitende hâlâ eski sürüm (ya da hiçbir şey) vardır. Kendi bilgisayarında npm run dev kullandığın…

Ders 32: Yayına alma ve Blok 4 projesi: takım API'si →

Error: timeout exceeded when trying to connect: release() finally'de değil

pool.connect() ile aldığın bağlantıyı bir yolda geri bırakmayı unutunca. Ders 37'de release()'in hiç yazılmadığı hâlini görmüştün. Daha sinsi biçimi, onu finally yerine try'ın sonuna yazmak: başarılı isteklerde…

Ders 38: Blok 5 projesi: veritabanlı API →

Tailwind 2

Sınıf adını parça parça kurmak: bg-${renk}-700

Sınıf adının bir parçasını değişkenden, prop'tan ya da şablon metinle kurunca. Şu bileşeni components/RenkliDugme.tsx olarak yaz ve sayfada iki kez kullan: Kaydet ve Onayla.

Ders 45: Stil, erişilebilirlik ve kullanıcı deneyimi →

TestingLibraryElementError 1

TestingLibraryElementError: Found multiple elements with the role "button" and name "Çıkar"

vite.config.ts'te globals: true yokken, aynı dosyada birden çok testin bileşen çizdiği durumda. Önceki testlerin bileşenleri sayfada kalır; üçüncü test iki tane "Çıkar" düğmesi bulur.

Ders 53: Test yazmak ve kod kalitesi →

TimeoutError 1

DOMException [TimeoutError]: The operation was aborted due to timeout

AbortSignal.timeout ile verdiğin süre dolunca istek kesilir ve fetch bu hatayı fırlatır. Yakalamazsan program çöker:

Ders 30: Dış API'lere bağlanmak →

TypeScript 25

error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

Bir fonksiyonu yanlış tipte bir argümanla çağırınca. Değer çoğu zaman başka bir yerden gelir: bir formdan, bir dosyadan, bir API'den. Dene: tipleri geri yazdıktan sonra hasar.ts'nin sonuna, bir satır boşluk bırakıp…

Ders 39: TypeScript: tiplerle güvenli kod →

error TS2339: Property 'mana' does not exist on type 'Sampiyon'.

Bir objede, tipinde olmayan bir alanı okuyunca. JavaScript bu satırda hata vermez, undefined verir (Ders 4): node sampiyon.ts önce Ahri: 100 can, 300 altın, sonra undefined yazar. Yanlış yazılmış bir alan adı böylece…

Ders 39: TypeScript: tiplerle güvenli kod →

error TS18048: 'o.takimAdi' is possibly 'undefined'.

undefined olabilecek bir değeri denetlemeden kullanınca: isteğe bağlı bir alan, find'ın sonucu, verilmeyebilecek bir parametre.

Ders 39: TypeScript: tiplerle güvenli kod →

SyntaxError [ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX]: TypeScript enum is not supported in strip-only mode

Başka dillerden ya da eski TypeScript kodlarından tanıdık gelen enum ile sabit bir liste tanımlayıp dosyayı node ile çalıştırınca. Dene, koridor-enum.ts:

Ders 39: TypeScript: tiplerle güvenli kod →

This is not the tsc command you are looking for

npx tsc'yi TypeScript kurulu olmayan bir klasörde çalıştırınca: yanlış klasördeysen ya da npm install -D typescript'i atladıysan. npx komutu projede bulamayınca npm'de tsc adlı paketi arar ve önce sorar:

Ders 39: TypeScript: tiplerle güvenli kod →

npx tsc --noEmit hata yerine uzun bir yardım metni yazıyor

Klasörde tsconfig.json yoksa: dosyayı oluşturmayı unuttuysan, başka bir klasöre kaydettiysen ya da adını yanlış verdiysen (tsconfig.js, tsconfig.json.txt). tsc denetleyecek bir proje bulamayınca kullanım kılavuzunu…

Ders 39: TypeScript: tiplerle güvenli kod →

error TS5112: tsconfig.json is present but will not be loaded if files are specified on commandline.

Yalnız tek bir dosyayı denetlemek için adını komuta yazınca: npx tsc --noEmit hasar.ts.

Ders 39: TypeScript: tiplerle güvenli kod →

error TS2591: Cannot find name 'process'.

process.argv (Ders 38) ya da process.env (Ders 29) kullanan bir dosyayı, tsconfig.json'da "types": ["node"] olmadan denetleyince. TypeScript 6'dan beri tip paketleri kendiliğinden yüklenmiyor; @types/node kurulu olsa…

Ders 39: TypeScript: tiplerle güvenli kod →

error TS1484: 'Sampiyon' is a type and must be imported using a type-only import

Bir tipi import type yerine sıradan import ile alınca. Dene: KartListesi.tsx'in ikinci satırını import { Sampiyon } from "./veri" yap ve kaydet. Kartlar ekranda kalır ama konsolda [vite] SyntaxError ve [vite] Failed…

Ders 40: React'e giriş: bileşenler ve JSX →

Argument of type 'string' is not assignable to parameter of type 'SetStateAction<number>'.

Sayı tutan bir state'e kutudan gelen metni doğrudan verince: onChange={(olay) => setAltin(olay.target.value)}.

Ders 41: State ve olaylar →

Property 'id' does not exist on type 'Promise<{ id: string; }>'

params'ı await etmeden içinden id almaya çalışınca: eski örneklerden kalma bir alışkanlık.

Ders 43: Next.js temelleri →

This comparison appears to be unintentional because the types 'number' and 'string' have no overlap.

Adresten gelen id'yi sayıya çevirmeden dizideki sayı id'lerle karşılaştırınca: s.id === id.

Ders 43: Next.js temelleri →

Property 'isim' does not exist on type 'Promise<Sampiyon | undefined>'.

async bir fonksiyonu await yazmadan kullanınca. sampiyonBul artık değeri değil, değerin Promise'ini döndürüyor; şampiyon sayfasındaki eski satır const sampiyon = sampiyonBul(id) duruyor:

Ders 44: Next.js ile tam yığın (full-stack) →

'inputSchema' does not exist in type 'Tool'

Alan adını yanlış yazınca. En sık hâli input_schema yerine inputSchema yazmak: API alan adlarını alt çizgiyle yazar (input_schema, tool_use_id, stop_reason), JavaScript alışkanlığın ise camelCase ister.

Ders 49: Araç kullanımı (tool use) →

error TS2554: Expected 3 arguments, but got 2.

Bir fonksiyona yeni bir parametre ekleyip onu çağıran eski dosyaları güncellemeyince.

Ders 50: Basit bir ajan yazmak →

'is_eror' does not exist in type 'ToolResultBlockParam'

tool_result bloğundaki bir alanın adını yanlış yazınca. Burada araciYonet'in son satırında is_error yerine is_eror yazılmış:

Ders 50: Basit bir ajan yazmak →

Veritabanı 12

AggregateError [ECONNREFUSED]

Çoğu zaman --env-file=.env'i unutunca. DATABASE_URL boş kalır, pg da varsayılan adrese, kendi bilgisayarındaki 5432 numaralı porta (Postgres'in varsayılan portu) bağlanmaya çalışır. Orada çalışan bir Postgres yoksa…

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

password authentication failed for user "neondb_owner"

Sunucuya ulaştın ama şifre yanlış. Dizeyi eksik kopyaladın, yıldızlı hâlini aldın ya da şifreyi sıfırladıktan sonra .env'i güncellemedin.

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

getaddrinfo ENOTFOUND

Sunucu adı yanlış yazılınca ya da internet bağlantın yokken. getaddrinfo, alan adını IP adresine çeviren işlemdir (Ders 18'deki DNS); ENOTFOUND "böyle bir ad bulunamadı" demek. Buradaki dizede neon.tech yerine…

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

The server does not support SSL connections

Kendi bilgisayarında (ya da Docker'da) çalışan, SSL'i açık olmayan bir Postgres'e sslmode=require ya da verify-full içeren bir dizeyle bağlanınca. Bir öğreticiyi izlerken yerel bir Postgres kurduysan karşına çıkabilir.

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

remaining connection slots are reserved for roles with the SUPERUSER attribute

Havuzu route'un içinde, her istekte yeniden kurunca. Her istek yeni bir havuz ve yeni bir bağlantı açar. Bu bağlantılar ancak 10 saniye boşta kaldıktan sonra kapanır; kısa sürede çok istek gelirse birikirler ve…

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

11. istekte sunucu donuyor: client.release() unutuldu

pool.connect() ile bağlantı alıp geri vermeyince. Her istek havuzdan bir bağlantı eksiltir; on istekten sonra havuz boşalır ve sıradaki istek, hiç gelmeyecek bir bağlantıyı sonsuza kadar bekler. Terminalde hata yok;…

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

Unhandled 'error' event ve terminating connection due to administrator command

Havuzda boşta bekleyen bir bağlantıyı veritabanı tarafı kapatınca ve havuzun error olayını dinleyen kimse yokken. Aşağıdaki küçük betik bir sorgu atıp üç saniye bekliyor; o arada bağlantıyı veritabanı tarafından…

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

bind message supplies 1 parameters, but prepared statement "" requires 0

Dizideki değer sayısı ile metindeki yer tutucu sayısı tutmayınca. En sık sebebi yer tutucuyu tırnağa almak: '$1' bir metin olduğu için sorguda hiç yer tutucu kalmaz, ama sen bir değer gönderirsin.

Ders 37: Node.js'ten PostgreSQL'e bağlanmak →

Kullanılan şampiyonu silmek 409 değil 500 veriyor: violates RESTRICT setting of foreign key constraint

ON DELETE RESTRICT ile korunan bir satırı API'den silmeye kalkınca, hata çevirin yalnız 23503'ü tanıyorsa.

Ders 38: Blok 5 projesi: veritabanlı API →

invalid input syntax for type integer: "abc"

Adresten gelen metni denetlemeden integer bir sütunla karşılaştırınca. Ders 37'den tanıdık: Postgres "abc"'yi sayıya çeviremez. Sayfa 500 verir, terminalde aynı hata iki kez yazılır (bir generateMetadata, bir sayfa…

Ders 44: Next.js ile tam yığın (full-stack) →

Tarih bir gün geri: date sütunu Date objesi geliyor

Sorguda tarih::text AS tarih yerine düz tarih yazınca. Hata mesajı yok: 20 Eylül'de oynanan maçın kartında 19 Eylül 2026 yazar. Sebebi pg'nin date sütununu ne yaptığı. Aynı satırı iki biçimde okuduk:

Ders 46: Blok 6 projesi: tam yığın uygulama →

invalid input syntax for type vector

Vektörü JSON.stringify'dan geçirmeden, JavaScript dizisi olarak sorguya verince. pg bir JavaScript dizisini Postgres'in dizi biçimine çevirir ({...}); pgvector ise köşeli parantezli metin bekler.

Ders 51: Kendi verinle yapay zekâ ve Blok 7 projesi →

Vite 1

VS Code 1

Program kırma noktasında durmuyor

Kırmızı noktayı koydun ama program durmadan sonuna kadar çalıştı. En sık sebep programı terminalde node ders7.js ile çalıştırmak: kırma noktaları yalnızca hata ayıklama oturumunda (F5) çalışır. Ctrl+F5 (Run Without…

Ders 7: Hata ayıklama, Git ve GitHub →

ZodError 1

Diğer 121

npm.ps1 cannot be loaded because running scripts is disabled on this system

npm --version yazınca. Windows'un varsayılan güvenlik ayarı PowerShell betiklerinin (.ps1 dosyalarının) çalışmasına izin vermez; Node 24 ile gelen npm komutu da PowerShell'de böyle bir betik olarak çalışır.

Ders 0: Başlamadan önce: bilgisayar, program ve araçların →

Sol altta Restricted Mode yazıyor

Klasörü açarken güven sorusuna No, I don't trust the authors dediysen. VS Code klasörü kısıtlı modda açar: üstte "Restricted Mode is intended for safe code browsing. Trust this folder to enable all features." yazan…

Ders 0: Başlamadan önce: bilgisayar, program ve araçların →

Dosyanın adı merhaba.js.txt olmuş

Dosyayı Dosya Gezgini'nde Yeni → Metin Belgesi (New → Text Document) ile oluşturup adını merhaba.js yapınca. Uzantılar gizliyse adın sonunda görünmeyen bir .txt kalır ve Node merhaba.js adında bir dosya bulamaz:

Ders 0: Başlamadan önce: bilgisayar, program ve araçların →

Koşulda tek =: hata yok, sonuç yanlış

Karşılaştırmak isterken === yerine = yazınca: if (hp = 0). Mesaj çıkmaz; program yanlış yolu seçer ve değişkenin değerini de değiştirir. Yukarıda, En sinsi hata bölümünde gördün.

Ders 2: Karşılaştırma ve karar: if / else →

Süslüsüz if: yalnızca ilk satır koşula bağlı

if'ten sonra süslü parantez koymayıp altına birden çok satır yazınca. Mesaj çıkmaz; ikinci satırdan sonrası her durumda çalışır. Yukarıda, Süslü parantezi unutursan bölümünde gördün.

Ders 2: Karşılaştırma ve karar: if / else →

Fonksiyonu tanımladım ama hiçbir şey olmuyor

Fonksiyonu tanımlayıp hiç çağırmayınca. Program hatasız biter ama ekrana hiçbir şey yazmaz; yukarıdaki VS Code penceresinde gördüğün durum.

Ders 3: Çoklu karar ve fonksiyon →

Parantezsiz çağrı: [Function: durumYaz]

Fonksiyonu çağırırken parantezleri unutunca. Tek başına durumYaz yazmak fonksiyonu yalnızca anar, çalıştırmaz. Program sessizce devam eder:

Ders 3: Çoklu karar ve fonksiyon →

Çıktıda undefined var

Fonksiyonu çağırırken bir argümanı vermeyi unutunca. Hata mesajı çıkmaz; eksik parametrenin yerine undefined yazılır.

Ders 3: Çoklu karar ve fonksiyon →

nothing added to commit but untracked files present

git add . adımını atlayıp doğrudan git commit yazınca. Git yeni dosyayı görüyor, ama onu kayda eklemesini henüz istemedin.

Ders 3: Çoklu karar ve fonksiyon →

Program bitmiyor, terminal aynı satırla doluyor (sonsuz döngü)

Döngünün koşulu hiç false olmayınca: değer gövdede değişmiyorsa, sayaç ters yöne gidiyorsa (i--) ya da while (true) içinde break yoksa. Hata mesajı yoktur; aynı satırlar durmadan akar ya da program hiçbir şey…

Ders 5: Dizi ve döngü: bütün takım →

for'da let'i unutmak: hata yok ama i sızıyor

Sayacı let olmadan yazınca: for (i = 0; ...). Şu an yazdığın dosyalarda JavaScript bunu hata saymaz; i adlı kutuyu kendisi, bütün dosyanın görebileceği biçimde açar.

Ders 5: Dizi ve döngü: bütün takım →

undefined ya da NaN: return yerine console.log yazmak

Fonksiyon sonucu ekrana yazıyor ama geri vermiyorsa. Ekranda doğru sayıyı gördüğün için fonksiyonun çalıştığını sanırsın; sonucu kullandığın yere ise undefined gelir. undefined ile hesap yaparsan sonuç NaN olur.

Ders 6: return ve ilk mini proje: takım savaşı →

Döngünün içinde erken return false

"Takımda canlı var mı?", "listede Garen var mı?" gibi arama fonksiyonlarında return false'u döngünün içine, else'e yazınca. Fonksiyon yalnız ilk elemana bakıp karar verir. Hata mesajı çıkmaz, cevap sessizce yanlış olur.

Ders 6: return ve ilk mini proje: takım savaşı →

return'den sonra yazılan satır hiç çalışmıyor

Bir satırı return'ün altına yazınca. return fonksiyonu bitirdiği için o satıra hiç inilmez. Hata mesajı çıkmaz; VS Code satırı soluk gösterir ve üstüne gelince Unreachable code detected der.

Ders 6: return ve ilk mini proje: takım savaşı →

Sonuç NaN çıkıyor ama hata mesajı yok

Hesaba sayıya çevrilemeyen bir metin ya da undefined girince: yanlış yazılmış bir obje alanı, split'ten beklenenden az parça, virgüllü bir sayı ("3,5").

Ders 9: Metinler ve sayılarla çalışmak →

Ekrana [Function: toUpperCase] yazıyor

Metodu parantezsiz yazınca. Parantez yoksa metot çalışmaz; JavaScript sana metodun kendisini gösterir. Ders 3'teki parantezsiz fonksiyon çağrısının aynısı.

Ders 9: Metinler ve sayılarla çalışmak →

Türkçe metin karşılaştırması tutmuyor (İ ve i)

Türkçe metni toLowerCase ya da toUpperCase ile çevirip karşılaştırınca. "İ" küçültülünce iki karakterli bir i̇ olur, "i" büyütülünce noktasız I olur.

Ders 9: Metinler ve sayılarla çalışmak →

Süslü parantezli ok fonksiyonu undefined döndürüyor

Tek satırlık bir ok fonksiyonunu sonradan süslü parantezle açıp return yazmayı unutunca. Hata mesajı yok: program çalışır ama sonuç undefined gelir.

Ders 10: Fonksiyonlar derinlemesine →

Parametre dışarıdaki değişkeni gölgeliyor, değer değişmiyor

Parametreye dışarıdaki değişkenle aynı adı verip fonksiyonun içinde değiştirince, dışarıdakinin de değişeceğini sanınca. Hata mesajı yok; yalnızca sonuç yanlış.

Ders 10: Fonksiyonlar derinlemesine →

Çıktıda [Function (anonymous)]: fabrikayı çağırmayı unutmak

Fabrika fonksiyonunu parantezsiz atayınca. Hata mesajı yok; sayı beklerken fonksiyon yazdırılır.

Ders 10: Fonksiyonlar derinlemesine →

Satır [ ile başlayınca önceki satıra yapışır

Noktalı virgül kullanmadığın kodda bir satır [ ile başladığında. JavaScript satır sonunu her zaman "komut bitti" saymaz; sonraki satır [ ile başlıyorsa onu önceki satırın devamı sanar.

Ders 12: Obje ve dizilerde ileri teknikler →

Kopyayı değiştirdim, asıl obje de değişti

const kopya = asil yazınca ya da iç içe veride { ...asil } ile kopya alıp kopyanın içteki dizisini veya objesini değiştirince. Hiçbir mesaj çıkmaz; program çalışır ama yanlış çalışır. Belirtisi: hiç dokunmadığını…

Ders 12: Obje ve dizilerde ileri teknikler →

JSON metnini parse etmeden kullanmak

JSON metnini obje sanıp alanlarını okumaya kalkınca. Hata çıkmaz; alanlar undefined, hesaplar NaN gelir. JSON bölümünde kayit.isim örneğiyle gördün.

Ders 12: Obje ve dizilerde ileri teknikler →

catch yanlış yazılan adı yuttu, yanlış mesaj verdi

try'ın içinde bir adı yanlış yazınca (altin yerine altn). JavaScript ReferenceError fırlatır, catch ise hangi hatayı yakaladığına bakmadan kendi cümlesini yazar. Program çökmez ama yanlış şey söyler.

Ders 13: Hatalarla barışmak: try, catch, throw →

Error [ERR_MODULE_NOT_FOUND]: Cannot find module

Göreli yolda uzantıyı unutunca ya da dosya adını yanlış yazınca.

Ders 14: Modüller ve npm →

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'dukkan.js'

Kendi dosyanı alırken yolun başına ./ koymayı unutunca.

Ders 14: Modüller ve npm →

npm.ps1 cannot be loaded because running scripts is disabled on this system

Windows'ta PowerShell terminalinde npm yazınca. Bu kart kalıcı çözümü anlatıyor.

Ders 14: Modüller ve npm →

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'picocolors'

Paketi kurmadan import edince, başka bir klasörde kurunca ya da node_modules klasörü yokken (ör. projeyi GitHub'dan yeni indirmişken).

Ders 14: Modüller ve npm →

npm error Missing script: "baslat"

package.json'da olmayan bir betiği çalıştırmak isteyince (adı yanlış yazınca ya da betiği eklemeyi unutunca).

Ders 14: Modüller ve npm →

npm error code EJSONPARSE

package.json'u elle düzenlerken virgülü ya da tırnağı unutunca. Aşağıdaki dosyada 7. satırın sonunda virgül yok:

Ders 14: Modüller ve npm →

npm error enoent Could not read package.json

npm komutunu package.json'un olmadığı bir klasörde çalıştırınca. En sık sebep, terminalin hâlâ C:\kod\ogren'de olması.

Ders 14: Modüller ve npm →

forEach içindeki await beklenmiyor

Bir dizinin her elemanı için asenkron bir iş yapıp hepsini beklemek isteyince forEach'e async bir fonksiyon verirsen. Ok fonksiyonunun önüne de async yazılabilir: async (oyuncu) => { … }. Hata mesajı yok, ama sıra…

Ders 15: Asenkron JavaScript: Promise ve async/await →

Error: ENOENT: no such file or directory

Var olmayan bir dosyayı okumaya çalışınca. ENOENT (error: no entry), "böyle bir dosya ya da klasör yok" demek; Ders 14'te npm'in mesajında görmüştün. Kendin görmek için önce VS Code'da kayit.json'un adını…

Ders 17: Blok 2 projesi: terminalde metin tabanlı oyun →

Bu siteye ulaşılamıyor / This site can’t be reached

Olmayan bir alan adına gidince, örneğin adı yanlış yazınca: DNS bir numara bulamaz, tarayıcının bağlanacağı bir yer kalmaz. Denemek için adres çubuğuna başıyla birlikte https://xdd.bbay yaz. Yalnız xdd.bbay yazarsan…

Ders 18: Web nasıl çalışır? →

Access to fetch at 'file:///…' has been blocked by CORS policy

Çift tıklayarak (file:// ile) açtığın bir sayfada fetch ile başka bir dosya isteyince:

Ders 18: Web nasıl çalışır? →

Open a folder or workspace... (File -> Open Folder)

VS Code'da klasör açmadan, yalnız bir dosya açıkken Go Live'a basınca. Live Server bir klasörü yayınlar; klasör yoksa neyi yayınlayacağını bilemez.

Ders 18: Web nasıl çalışır? →

Refused to apply style from '…' because its MIME type ('text/html') is not a supported stylesheet MIME type

'teki dosya adını yanlış yazınca (stil.ccs). Sayfa stilsiz, düz siyah beyaz görünür.

Ders 18: Web nasıl çalışır? →

Türkçe harfler bozuk: hoÅŸ geldin

satırı yoksa ve sunucu da kodlamayı söylemiyorsa. Tarayıcı tahmin eder ve eski bir Batı ya da Türkçe kodlama seçer: UTF-8'de iki bayt tutan her Türkçe harf iki garip işarete dönüşür, sekmedeki başlık da İlk sayfam olur.

Ders 18: Web nasıl çalışır? →

Değişiklik sayfaya yansımıyor

Dosyayı değiştirip kaydetmeden tarayıcıyı yenileyince. Tarayıcı da sunucu da diskteki dosyayı okur, VS Code'da kaydetmediğin hâli bilmez; Live Server da yalnız kaydedince yeniler.

Ders 18: Web nasıl çalışır? →

Değiştirdiğin dosya başka, açtığın dosya başka

Bilgisayarında aynı adlı iki dosya varsa (indirilenler klasöründe bir index.html, C:\kod\web-ilk'te bir tane) ya da sunucuyu yanlış klasörde başlatınca. Örneğin npx serve'ü C:\kod'da çalıştırırsan sayfan yerine…

Ders 18: Web nasıl çalışır? →

Sayfa yerine dosya listesi açılıyor: index.html.txt

Dosyayı Dosya Gezgini'nde Yeni → Metin Belgesi (New → Text Document) ile oluşturup adını index.html yapınca. Uzantılar gizliyse gerçek adı index.html.txt olur: Ders 0'daki uzantı tuzağı. Çift tıklayınca tarayıcı…

Ders 18: Web nasıl çalışır? →

Betik hiç çalışmıyor: 404 (Not Found) ve Refused to execute script

içindeki dosya adı yanlış yazılınca (sayc.js) ya da dosya başka klasördeyse. Sayfa açılır ama kodun hiç çalışmaz, console.log'ların bile. Console'a iki kırmızı satır düşer:

Ders 22: DOM: JavaScript sayfayla konuşuyor →

Her eklemede eski satırlar bir kez daha görünüyor

ciz()'in ilk satırını, yani liste.replaceChildren()'ı unutunca. ciz her seferinde bütün diziyi yeniden yazar ama eski satırlar da yerinde kalır. Sayfayı açıp Ahri'yi, sonra Jinx'i ekleyince liste şu dört satır olur:

Ders 23: Formlar, kullanıcı girdisi ve localStorage →

[object Object]: objeyi JSON.stringify olmadan saklamak

setItem'a objeyi doğrudan verince. setItem onu metne çevirir; bir objenin metin hâli de [object Object]'tir (Ders 4'te metinle + yaparken görmüştün). Asıl veri kaybolmuştur; geri okumaya kalkınca JSON.parse patlar.

Ders 23: Formlar, kullanıcı girdisi ve localStorage →

GET …/champion.json 403 (Forbidden)

Adresteki sürüm, dil kodu ya da dosya adı yanlış olunca. Data Dragon'da olmayan her dosya 403 (Forbidden, yasak) döndürür; çoğu site böyle bir durumda 404 (Not Found, bulunamadı) döndürür. Dersteki sayfada ${surum}…

Ders 24: Tarayıcıdan veri çekmek: fetch ve API →

Kartlarda İngilizce unvanlar var

Adresteki dil kodu en_US kalınca; çoğu zaman internette bulduğun bir örneği olduğu gibi kopyaladığında. Hata mesajı yoktur; Ahri'nin kartında "Dokuz Kuyruklu Tilki" yerine "the Nine-Tailed Fox" yazar.

Ders 24: Tarayıcıdan veri çekmek: fetch ve API →

hidden yazdım ama öğe hâlâ görünüyor

Bir öğeye hem hidden niteliği verip hem de CSS'te display değeri (grid, flex, block) yazınca. hidden aslında tarayıcının kendi stil dosyasındaki bir display: none kuralıdır. Senin stil dosyandaki kurallar…

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

Access to script at 'file:///…' from origin 'null' has been blocked by CORS policy

index.html dosyasına çift tıklayıp açınca. Adres çubuğunda http://127.0.0.1:5500 yerine file:///C:/kod/ansiklopedi/index.html yazar, sayfada "Yükleniyor…" takılı kalır ve konsolda şu iki satır çıkar:

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

Failed to resolve module specifier "api.js" ve 404 (Not Found)

import satırındaki yolu yanlış yazınca. Başında ./ olmayan bir yol yazarsan tarayıcı onun bir dosya mı, bir paket adı mı olduğunu bilemez:

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

Arama kutusunda Enter'a basınca liste sıfırlanıyor

59-61. satırlardaki submit dinleyicisini yazmazsan. Filtreler bir içinde; arama kutusundayken Enter'a basmak formu gönderir. Tarayıcı da formu gönderirken sayfayı yeniden yükler.

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

Geri dönünce kutularda eski filtre yazıyor ama liste hepsini gösteriyor

Formda autocomplete="off" yoksa ve tarayıcı geri dönülen sayfayı baştan yüklerse. Tarayıcı baştan yüklerken bir iyilik yapmaya çalışır: form kutularını son hâlleriyle doldurur. Ama JavaScript de baştan başlar ve…

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

The requested module './api.js' does not provide an export named 'sampiyonuGetir'

import satırına bir adı yanlış yazınca. 1. satıra sampiyonGetir yerine sampiyonuGetir yazdığımızda sayfa hiç açılmadı, "Yükleniyor…" takılı kaldı:

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

Pages'te stil ve betik gelmiyor: 404 (Not Found)

index.html'de yolları / ile başlatınca: href="/stil.css", src="/js/uygulama.js". Bilgisayarında her şey çalışır; Pages'te sayfa çıplak HTML gibi görünür ve "Yükleniyor…" takılı kalır.

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

404 There isn't a GitHub Pages site here.

Site adresini açınca sayfa yerine GitHub'ın kendi 404 sayfası geliyor ve "There isn't a GitHub Pages site here." ("burada bir GitHub Pages sitesi yok") yazıyorsa. Üç olası sebep:

Ders 25: Blok 3 projesi: şampiyon ansiklopedisi →

Error: listen EACCES: permission denied 3000;

.env'de port satırının sonuna noktalı virgül koyunca: PORT=3000;. Değer "3000;" olur. Node sayıya çevrilemeyen bir metni port numarası saymaz; onu, Windows'ta iki programın konuştuğu adlandırılmış bir hattın (named…

Ders 29: Dosya sistemi, ortam değişkenleri ve gizli bilgiler →

push sonrası ekran güncellenmiyor

State'teki diziyi push, splice, sort ya da takim[0].yildiz = 2 gibi yerinde değiştiren bir işlemle değiştirip aynı diziyi setTakim(takim) ile verince. Hata mesajı yok; Console'a yazdırırsan dizi değişmiş görünür,…

Ders 41: State ve olaylar →

Eski değer tuzağı: iki çağrı, bir artış

Aynı olayda aynı state'i değerle iki kez değiştirince: setAltin(altin + 1) iki kez çalışır, altın yalnız 1 artar. Hata mesajı yoktur.

Ders 41: State ve olaylar →

Error: Could not resolve authentication method.

SDK anahtarı bulamayınca. En sık sebebi programı --env-file=.env olmadan çalıştırmak. .env'deki değişkenin adını yanlış yazmak (ANTROPIC_API_KEY) ya da değeri boş bırakmak da aynı hatayı verir.

Ders 47: Büyük dil modelleri ve ilk API isteğin →

Error: ENOENT: no such file or directory, open 'C:\kod\sampiyonlar.json'

Programı proje klasörünün dışından çalıştırınca. readFile("sampiyonlar.json") dosyayı .ts dosyasının yanında değil, terminalin bulunduğu klasörde arar.

Ders 49: Araç kullanımı (tool use) →

Error: Sahte istemcinin 4. istek için hazır yanıtı yok.

Döngüden çıkmayı unutunca. Örneğin cevabı return ile döndürmek yerine yalnız yazdırırsan döngü sürer:

Ders 50: Basit bir ajan yazmak →

generated asynchronous activity after the test ended

assert.rejects gibi Promise döndüren bir denetimin önüne await yazmayınca. Test, denetim bitmeden "geçti" diye kapanır; denetimin sonucu sonradan gelir.

Ders 53: Test yazmak ve kod kalitesi →

'console' is not defined no-undef

eslint.config.js'te languageOptions.globals bölümünü unutunca. ESLint varsayılan olarak yalnızca JavaScript dilinin kendi adlarını tanır; console ise Node'un (ve tarayıcının) eklediği bir addır. Düzeltilmiş…

Ders 53: Test yazmak ve kod kalitesi →

npm ci: package.json ile package-lock.json uyuşmuyor (are in sync)

package.json ile package-lock.json birbirini tutmayınca. En sık sebepler: package.json'ı elle değiştirip npm install çalıştırmamak ya da kilit dosyasını Git'e hiç eklememek. Bilgisayarında aynı hatayı npm ci yazarak…

Ders 53: Test yazmak ve kod kalitesi →

Döngüde var: bütün zamanlayıcılar aynı sayıyı yazıyor

var ile kurulan bir for döngüsünün içinde, döngü sayacını sonradan çalışacak bir fonksiyonda (zamanlayıcı, olay dinleyicisi) kullanınca. Hata mesajı yok, sonuç yanlış. Mülakatlarda en sık sorulan "bu kod ne yazar?"…

Ders 55: Mülakata hazırlık ve sonrası →

Metodu koparınca this kayboluyor: Cannot read properties of undefined (reading 'isim')

Bir metodu objeden alıp ayrı bir değişkene koyduğunda ya da başka bir fonksiyona verdiğinde (callback). Çağrı artık obje.metot() biçiminde olmadığı için metodun içinde this boş kalır.

Ders 55: Mülakata hazırlık ve sonrası →