Node.js ile çalışan geliştiriciler için, bazen çok sinir bozucu bir hata ile karşılaşabiliriz: EADDRINUSE. Eğer bu hatayı aldıysanız, büyük ihtimalle uygulamanız, kullandığı portu başka bir uygulama tarafından zaten kapılmış durumda. Bu, işler yolunda gitmediğinde ve uygulamanız çalışmadığında karşılaşılan yaygın bir durumdur. Ama endişelenmeyin! Bu yazımda, EADDRINUSE hatasının ne olduğunu, neden oluştuğunu ve bu hatayı nasıl çözebileceğinizi detaylı bir şekilde anlatacağım.
EADDRINUSE Hatası Nedir?
EADDRINUSE, "Address already in use" ifadesinin kısaltmasıdır. Türkçeye çevirdiğimizde, "Adres zaten kullanımda" anlamına gelir. Bu hata, Node.js uygulamanız bir port üzerinde çalışmaya çalışırken, o portun başka bir uygulama tarafından kullanıldığını belirten bir hata mesajıdır. Örneğin, geliştirdiğiniz bir Node.js uygulaması 3000 numaralı portu kullanmak istiyor ama bu port şu anda başka bir uygulama tarafından kullanılmakta. İşte bu durumda EADDRINUSE hatası alırsınız.
Hata Nasıl Çözülür?
Bu hata karşısında panik yapmanıza gerek yok. Aşağıda, bu hatayı adım adım nasıl çözebileceğinizi anlatacağım.
# 1. Hangi Uygulamanın Portu Kullandığını Bulun
Öncelikle, hangi uygulamanın portu kullandığını öğrenmemiz gerekiyor. Eğer Unix tabanlı bir işletim sistemi (Linux veya Mac) kullanıyorsanız, terminal üzerinden şu komutla portu hangi uygulamanın kullandığını öğrenebilirsiniz:
lsof -i :3000
Bu komut, 3000 numaralı portu kullanan tüm süreçleri listeleyecektir. Eğer Windows kullanıyorsanız, şu komutla portu kullanan süreci bulabilirsiniz:
netstat -ano | findstr :3000
# 2. Uygulamayı Sonlandırın
Portu hangi uygulamanın kullandığını öğrendikten sonra, o uygulamayı sonlandırarak portu serbest bırakabilirsiniz. Eğer bir Node.js uygulamasıysa, genellikle terminalde `Ctrl + C` ile sonlandırabilirsiniz. Ancak başka bir uygulama varsa, görev yöneticisi veya terminal üzerinden o uygulamanın işlem numarasını bularak sonlandırabilirsiniz.
Windows için görev yöneticisini açarak, işlem numarasına (PID) göre uygulamayı sonlandırabilirsiniz. Mac veya Linux için şu komutla süreci öldürebilirsiniz:
kill -9 [PID]
Burada `[PID]` kısmına, az önce bulduğunuz süreç ID'sini yazmalısınız.
# 3. Portu Değiştirme
Eğer portu kullanan uygulama sonlandırılamıyorsa ya da o portu kullanmaya devam etmek istiyorsanız, Node.js uygulamanızın kullandığı portu değiştirebilirsiniz. Bu, uygulamanızda çok basit bir değişiklik yaparak mümkün. İşte basit bir örnek:
const express = require('express');
const app = express();
const port = 4000; // Burada portu 4000 olarak değiştiriyoruz
app.listen(port, () => {
console.log(`Uygulama http://localhost:${port} adresinde çalışıyor`);
});
Port numarasını değiştirdikten sonra, uygulamanız artık eski port yerine yeni port üzerinde çalışacaktır.
# 4. Node.js'in Bekleyen Bağlantıları Temizlemesi
Bazen, Node.js bir bağlantıyı kapatmayı unutabilir ve bu yüzden port hala kullanımda görünür. Bu gibi durumlarda, aşağıdaki komut ile Node.js'in bekleyen bağlantıları temizlemesini sağlayabilirsiniz:
sudo fuser -k 3000/tcp
Bu komut, 3000 numaralı portu kullanan tüm bağlantıları sonlandırır. Ancak dikkatli olun, bu işlem başka bir uygulamayı da etkilemiş olabilir.
Sonuç
EADDRINUSE hatası, Node.js geliştiricileri için oldukça yaygın bir hata olmasına rağmen, çözümü oldukça basittir. Portu kullanan uygulamayı bulup sonlandırmak veya port numarasını değiştirmek, sorununuzu genellikle çözecektir. Uygulamanızda bu hatayla karşılaşmadığınız bir gün dilerim!