`Error: listen EADDRINUSE
Bu, bir tür 'port çakışması' hatasıdır. Yani, belirttiğiniz port numarasını kullanmaya çalışan başka bir süreç ya da uygulama zaten o portu kullanıyor. Kulağa basit bir sorun gibi gelse de, yazılım geliştirme sürecinde zaman zaman karşımıza çıkan ve bazen geliştiricileri çileden çıkaran bir hata türüdür.
Peki, Node.js'de EADDRINUSE hatası ne anlama gelir? Ve bu hatayı nasıl çözebilirsiniz?
EADDRINUSE Hatasının Nedenleri
Örneğin, port 3000’i kullanmayı hedefliyorsunuz. Ancak daha önce çalıştırdığınız başka bir Node.js uygulaması bu portu hala kullanıyor olabilir. Veya yanlışlıkla bir uygulama birkaç kez başlatılmış olabilir.
EADDRINUSE Hatasının Çözümü
# 1. Çalışan Süreci Bulma
lsof -i :3000
Bu komut, belirtilen portu (örneğin 3000) kullanan süreçlerin listesini gösterir. Eğer süreç zaten çalışıyorsa, bu listedeki PID (Process ID) değerini not edin.
# 2. Süreci Sonlandırma
kill -9
Bu komut, ilgili süreci hemen sonlandırır ve portun kullanılabilir hale gelmesini sağlar. Eğer birden fazla süreç varsa, her birini bu şekilde sonlandırabilirsiniz.
# 3. Alternatif Port Kullanma
const express = require('express');
const app = express();
const port = 3001;
app.listen(port, () => {
console.log(`Sunucu ${port} portunda çalışıyor!`);
});
Burada, port 3001’i kullandık. Artık, eski port çakışması problemi ortadan kalkacaktır.
# 4. Portu Dinamik Olarak Seçme
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Sunucu ${port} portunda çalışıyor!`);
});
Bu kodda, uygulama önce process.env.PORT değişkenine bakar. Eğer bu değişken tanımlı değilse, varsayılan olarak 3000 portu kullanılır. Böylece başka bir portu dinlemeye çalışan bir başka süreç olsa bile, uygulamanız otomatik olarak bir port bulur.