EADDRINUSE Hatası Nedir?
Node.js ile geliştirdiğiniz uygulamanızı başlatırken karşılaştığınız "EADDRINUSE" hatası, sistemin belirli bir portu zaten başka bir işlem tarafından kullanıyor olduğunu belirten bir hata mesajıdır. Yani, uygulamanızın başlatmaya çalıştığı port başka bir uygulama tarafından işgal edilmiştir ve bu da Node.js'in doğru şekilde çalışmasını engeller.
Eğer terminal ekranınızda şöyle bir hata görüyorsanız:
Error: listen EADDRINUSE: address already in use 127.0.0.1:3000Bu, Node.js'in 127.0.0.1 IP adresindeki 3000 numaralı portu kullanmaya çalışırken, başka bir uygulamanın bu portu zaten kullandığını gösteriyor.
EADDRINUSE Hatasının Nedenleri
Peki, bu hata neden oluşur? İşte birkaç olasılık:
1. Port Çakışması
Node.js uygulamanız bir portu dinlemeye çalışırken, o portu başka bir uygulama kullanıyor olabilir. Bu, özellikle geliştirme sırasında sıkça karşılaşılan bir durumdur.
2. Uygulamanın Durdurulamaması
Bazen uygulamanız doğru şekilde kapatılmayabilir veya bir işlem düzgün şekilde sonlandırılmayabilir. Bu durumda, port hâlâ "açık" olarak görünür, fakat aslında kullanılabilir değildir.
3. Geliştirme Ortamında Çoklu Başlatmalar
Özellikle frontend ve backend geliştirmelerinde, yanlışlıkla aynı portu iki kez dinlemeye çalışmak bu hatayı tetikleyebilir. Farkında olmadan iki farklı terminalde aynı portu kullanmaya çalışıyor olabilirsiniz.
EADDRINUSE Hatasını Çözmek İçin Yöntemler
EADDRINUSE hatasını çözmek için birkaç yöntem bulunmaktadır. İşte bunlar:
1. Portu Kapatmak
Öncelikle, hata mesajındaki portu kullanan işlemi bulmak ve durdurmak gerekir. Eğer hata mesajında port numarasını görüyorsanız (örneğin 3000), aşağıdaki komutla hangi işlemin bu portu kullandığını öğrenebilirsiniz.
Linux/macOS için terminal komutu:
lsof -i :3000Windows için komut:
netstat -ano | findstr :3000Yukarıdaki komut, belirtilen portu kullanan işlemi gösterecektir. Ardından, bu işlemi sonlandırarak portu serbest bırakabilirsiniz.
Linux/macOS'ta:
kill -9 [PID]Windows’ta:
taskkill /PID [PID] /F2. Farklı Bir Port Numarası Kullanmak
Eğer portu serbest bırakmak mümkün değilse, basit bir çözüm olarak uygulamanızın dinleyeceği portu değiştirebilirsiniz. İşte bir örnek:
app.listen(4000, () => {
console.log('Sunucu 4000 numaralı portta çalışıyor');
});Port numarasını değiştirdiğinizde, uygulamanız farklı bir port üzerinden çalışacaktır ve EADDRINUSE hatası engellenmiş olur.
3. Portu Dinleyen Uygulamanın Kapanmasını Sağlamak
Eğer uygulamanız kapatılmıyorsa, portu düzgün şekilde serbest bırakmak için uygulamanın yönetildiği terminalde şu komutu çalıştırabilirsiniz:
Ctrl + CBu, terminalde çalışan uygulamanın durmasına yardımcı olur ve portu serbest bırakır.
4. Uygulamanızı Yeniden Başlatmak
Bazen basit bir yeniden başlatma, tüm port sorunlarını çözüme kavuşturabilir. Sunucuyu yeniden başlatarak, eski bağlantıların temizlenmesini sağlayabilirsiniz.
Sonuç
EADDRINUSE hatası, Node.js geliştiricilerinin sıkça karşılaştığı ve bazen can sıkıcı olabilen bir durumdur. Ancak, portu kullanan süreci bulmak, portu değiştirmek veya uygulamanızı düzgün şekilde kapatmak gibi basit çözümlerle bu sorunu rahatlıkla çözebilirsiniz.
Unutmayın, Node.js’in sağlıklı çalışabilmesi için, uygulamanızın kullandığı portların yönetilmesi çok önemlidir. Geliştirme sürecinde, portları yönetmek ve hata mesajlarını doğru anlamak, verimli bir çalışma ortamı oluşturmanıza yardımcı olacaktır.