Node.js EADDRINUSE Hatası Nedir?
EADDRINUSE hatası, Node.js uygulamanız bir portu kullanmaya çalışırken, o portun zaten başka bir uygulama tarafından kullanıldığını belirten bir hata mesajıdır. Bu durumda, Node.js uygulamanız başlatılamaz ve uygulama çalışmaz. Genellikle şu şekilde bir hata mesajı alırsınız:
Error: listen EADDRINUSE: address already in use :::3000
Bu hata, uygulamanızın dinlemeye çalıştığı portun başka bir işlem tarafından "kapılmış" olduğunu gösterir. Yani 3000 portunu kullanmaya çalışan bir uygulama varsa, bir başka uygulama da aynı portu kullanmaya çalışırsa, Node.js bu hatayı verir.
Hata Nasıl Ortaya Çıkar?
Genellikle iki durum bu hataya yol açar:
1. Aynı Portu Kullanan Birden Fazla Uygulama: Eğer bilgisayarınızda farklı bir uygulama aynı portu (örneğin, 3000) kullanıyorsa ve siz de aynı portu Node.js uygulamanızda kullanmak istiyorsanız, bu çakışma hataya yol açacaktır.
2. Uygulamanın Önceki Oturumlarının Kapanmaması: Node.js uygulamanızı başlattınız, ancak kapatmayı unuttunuz. Bu durumda, uygulamanın eski oturumu hâlâ çalışıyor olabilir ve aynı portu kullanıyor olabilir.
Peki, bu durumu nasıl düzelteceğiz? Hadi birlikte çözüm yollarına göz atalım!
EADDRINUSE Hatasını Nasıl Çözebiliriz?
1. Kullandığınız Portu Değiştirmek
En kolay çözüm, kullandığınız portu değiştirmektir. Örneğin, eğer 3000 portu kullanılmakta ise, başka bir port numarasına geçebilirsiniz.
const http = require('http');
const hostname = '127.0.0.1';
const port = 3001; // Portu değiştirdik
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Merhaba, dünya!\n');
});
server.listen(port, hostname, () => {
console.log(`Sunucu ${hostname}:${port} adresinde çalışıyor.`);
});
Bu basit çözüm çoğu zaman işe yarar. Ancak, bu her zaman mümkün olmayabilir. Portu değiştirmek yerine başka bir çözüm de arayabiliriz.
2. Hangi Uygulamanın Portu Kullandığını Bulmak
Eğer aynı portu kullanan bir başka uygulama varsa, o uygulamayı bulmak ve kapatmak da iyi bir çözüm olabilir. Bunun için, terminal ya da komut istemcisinde aşağıdaki komutları kullanabilirsiniz.
Mac/Linux:
lsof -i :3000
Bu komut, 3000 portunu kullanan işlemin ID'sini gösterir. Daha sonra bu işlemi öldürebilirsiniz:
kill -9
Windows:
Windows üzerinde de benzer bir işlem yapabilirsiniz. İlk olarak, portu kullanan işlem kimliğini (PID) öğrenmek için:
netstat -ano | findstr :3000
Bu komut, 3000 portunu kullanan işlem kimliğini verir. Daha sonra bu işlemi kapatmak için:
taskkill /PID /F
Bu komut, belirtilen işlemi zorla kapatacaktır.
3. Node.js Uygulamanızın Gereksiz Oturumları Kapalı Tutun
Node.js uygulamanız bir sebepten dolayı düzgün kapanmamış olabilir ve portu hala açık tutuyor olabilir. Eğer terminalde `Ctrl+C` komutunu kullanarak çıkış yapmanıza rağmen port hala açık kalıyorsa, uygulamanın arka planda hala aktif olma ihtimali vardır. Bunu engellemek için her zaman düzgün bir şekilde `exit` komutunu kullanarak uygulamanızın oturumunu kapatmayı unutmayın.
Sonuç Olarak
Node.js ile uygulama geliştirirken karşılaştığınız EADDRINUSE hatası, aslında oldukça yaygın bir durumdur ve çözümü de son derece basittir. Portu değiştirmek, işlemleri kapatmak ve gereksiz uygulama oturumlarını sonlandırmak bu sorunun çözülmesinde yardımcı olacaktır. Unutmayın, hata yapmaktan korkmayın, çünkü her hata size yeni bir şey öğretir!
Şimdi, portlarınızın savaşını kazandınız ve Node.js uygulamanız bir kez daha çalışıyor!