Bir sabah, kahvenizi yudumlarken Node.js ile geliştirdiğiniz projede heyecanla yeni bir özelliği test etmek istediniz. Ancak, terminal penceresinde aşağıdaki hatayı gördüğünüzde işler bir anda kararmış gibi oldu:
Error: listen EADDRINUSE: address already in use
Bu mesajın ne anlama geldiğini ve nasıl çözüleceğini biliyor musunuz? Merak etmeyin, bu yazıda tam olarak bu hatanın nedenini inceleyecek ve size çözüm önerileri sunacağım. Böylece bir dahaki sefere Node.js uygulamanızı çalıştırırken “EADDRINUSE” hatasına takılmadan projelerinizi hızlıca geliştirebileceksiniz.
EADDRINUSE Hatası Nedir?
Öncelikle bu hatanın ne anlama geldiğini anlamaya çalışalım. "EADDRINUSE", "address already in use" ifadesinin kısaltmasıdır ve temelde şunu söyler: “Bu port zaten başka bir uygulama tarafından kullanılıyor.” Node.js uygulamanız, belirli bir port üzerinden çalışmak üzere yapılandırıldığında, bu portun başka bir süreç tarafından kullanılmakta olduğu durumda bu hatayı alırsınız.
Peki, bu hatayı hangi durumlarda alırsınız? İşte birkaç yaygın senaryo:
- Daha önce çalıştırdığınız Node.js uygulaması düzgün şekilde kapanmadı ve portu serbest bırakmadı.
- Aynı portu kullanan bir başka uygulama (örneğin başka bir Node.js uygulaması ya da farklı bir backend servisi) aynı anda çalışıyor.
- Geliştirme sırasında sürekli testler yapıyorsunuz ve aynı port üzerinden birden fazla uygulama başlatmaya çalışıyorsunuz.
EADDRINUSE Hatasını Nasıl Çözebilirsiniz?
EADDRINUSE hatasıyla karşılaştığınızda, endişelenmeyin! Çözüm yolları aslında oldukça basittir. İşte denemeniz gereken adımlar:
# 1. Hangi Süreç Portu Kullanıyor?
İlk olarak, portu hangi sürecin kullandığını öğrenmeniz gerekiyor. Terminal üzerinden şu komutu çalıştırarak bu bilgiyi öğrenebilirsiniz:
lsof -i :PORT_NUMARASI
Burada `PORT_NUMARASI`, kullandığınız port numarasıdır (örneğin, `3000`). Bu komut size, portu kullanan sürecin PID (Process ID) bilgisini gösterecektir.
# 2. Süreci Sonlandırmak
Eğer portu kullanmakta olan bir süreç tespit ettiyseniz, bu süreci sonlandırmanız gerekebilir. Bunun için şu komutu kullanabilirsiniz:
kill -9 PID
Burada `PID`, tespit ettiğiniz süreç kimliğidir. Bu komut, süreci zorla sonlandıracak ve portunuzu serbest bırakacaktır.
# 3. Portu Yeniden Başlatmak
Süreci sonlandırdıktan sonra Node.js uygulamanızı yeniden başlatabilirsiniz. Uygulamanız artık o portu kullanabilecektir. Eğer sık sık bu hata ile karşılaşıyorsanız, port numarasını değiştirmeyi de düşünebilirsiniz.
# 4. “NPM Start” Sorunu
Bir başka yaygın sorun ise, Node.js uygulamanızın sürekli olarak `npm start` komutuyla başlatılıyor olması. Bu durumda, uygulamanın eski bir örneği hala arka planda çalışıyor olabilir. Komut satırını kapatıp terminali sıfırlamak da bazen işe yarayabilir.
# 5. Yeni Bir Port Seçmek
Eğer hiçbir şey işe yaramazsa, başka bir port numarası seçmek de iyi bir seçenek olabilir. Port numarasını değiştirmek için Node.js uygulamanızın konfigürasyon dosyasına gidin ve kullandığınız portu farklı bir numarayla değiştirin:
// Örneğin, port 3000 yerine 4000 kullanabilirsiniz
app.listen(4000, () => {
console.log("Uygulama 4000 portunda çalışıyor!");
});
Sonuç
Node.js’te karşılaşılan "EADDRINUSE" hatası, genellikle aynı portun birden fazla uygulama tarafından kullanılması nedeniyle ortaya çıkar. Ancak, bu durumu anlamak ve hızlıca çözmek oldukça basittir. Süreçlerinizi kontrol edin, gerekirse sonlandırın ve portunuzu serbest bırakın. Portu değiştirmek de bazen çok etkili bir çözüm olabilir.
Bir dahaki sefere bu hatayı aldığınızda panik yapmayın. Yukarıda paylaştığım adımlarla problemi çözebilir ve projenize hızlıca devam edebilirsiniz!