Node.js "EADDRINUSE" Hatası ile Tanışın
Bir sabah kod yazarken karşılaştığınız bir hata var: “EADDRINUSE”. Kafanız karışmış olabilir, çünkü "EADDRINUSE" ne demek? Bu yazıda, Node.js geliştirme sürecinde sıkça karşılaşılan bu hatanın ne olduğunu, neden ortaya çıktığını ve nasıl çözüleceğini adım adım keşfedeceğiz.
Node.js, arka planda güçlü bir web sunucusu gibi çalışan bir ortamdır. Ve bu ortamda çalışan her uygulama, belirli bir port üzerinden veri alışverişi yapar. Ancak işte burada “EADDRINUSE” hatası devreye girer. Bu hata, Node.js uygulamanızın kullanmaya çalıştığı portun zaten başka bir süreç tarafından kullanıldığını gösterir. Yani, iki farklı uygulama aynı portu kullanmaya çalışıyor. Sonuçta, Node.js uygulamanız bu portu açamaz ve “EADDRINUSE” hatası meydana gelir.
Hata Mesajı: Ne Anlama Geliyor?
Node.js uygulamanızı çalıştırırken terminal veya komut satırında şu hatayı görebilirsiniz:
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (node:net:1350:16)
at listenInCluster (node:net:1398:12)
at Server.listen (node:net:1491:7)
at Object. (path/to/your/app.js:15:5)
Bu hata, port numarasının (örneğin, 3000) zaten başka bir uygulama tarafından kullanıldığını belirtir. Node.js, yeni bir bağlantı açmaya çalışırken bu portu bulamaz ve bu nedenle uygulamanız başlamaz.
Neden EADDRINUSE Hatası Ortaya Çıkar?
Bir portun zaten kullanımda olması, çoğunlukla iki nedenden biriyle gerçekleşir:
1. Uygulamanız Daha Önce Çalışıyordu: Eğer Node.js uygulamanızın önceki bir örneğini çalıştırdıysanız ve bu uygulama düzgün bir şekilde kapatılmadıysa, port hala açık olabilir. Bu durumda, ikinci kez aynı portu kullanmaya çalıştığınızda "EADDRINUSE" hatası alırsınız.
2. Başka Bir Uygulama Portu Kapatmadı: Başka bir uygulama da bu portu kullanıyorsa ve o uygulama düzgün bir şekilde kapatılmadıysa, Node.js uygulamanız bu portu açamayacaktır.
Nasıl Çözülür?
Hadi, çözüm yollarına bakalım. İşte birkaç yöntemle bu hatayı nasıl düzeltebileceğinizi gösterelim.
1. Kullanılan Portu Buldunuz mu?
İlk adım, hangi portun kullanıldığını bulmaktır. Bunun için terminal veya komut satırında şu komutu kullanabilirsiniz:
lsof -i :3000
Bu komut, 3000 numaralı portu kullanan süreci listeler. Eğer başka bir işlem bu portu kullanıyorsa, bu işlem hakkında bilgi alabilirsiniz.
2. Süreci Sonlandırın
Eğer bir işlem 3000 numaralı portu kullanıyorsa, bu işlemi sonlandırmanız gerekir. Komut satırında aşağıdaki komutu kullanarak süreci sonlandırabilirsiniz:
kill -9 [PID]
Burada "[PID]" kısmı, yukarıdaki "lsof" komutundan aldığınız işlem kimliğidir. Bu komut, portu kullanan süreci öldürür ve portunuzu tekrar kullanılabilir hale getirir.
3. Port Numarasını Değiştirin
Eğer yukarıdaki adımlar işe yaramazsa, basitçe port numarasını değiştirebilirsiniz. Node.js uygulamanızda kullanılan portu değiştirmek için şu şekilde bir kod ekleyebilirsiniz:
const express = require('express');
const app = express();
const port = 3001; // Farklı bir port numarası
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
Bu durumda, uygulamanız artık farklı bir portta çalışacaktır.
Sonuç
Node.js ile çalışırken karşılaştığınız "EADDRINUSE" hatası, genellikle başka bir uygulamanın aynı portu kullanmasından kaynaklanır. Bu hata can sıkıcı olabilir, ancak yukarıdaki adımları takip ederek çözebilirsiniz. Unutmayın, geliştirme sürecinde bu tür hatalar sıkça karşılaşılan durumlardır. Sabırlı olun, çözüm yollarını deneyin ve yolunuza devam edin!