İlk Adım: Hata Mesajını Okuyun
"EADDRINUSE" hatasını, genellikle Node.js uygulamanızı başlatmaya çalıştığınızda görürsünüz. Mesaj şu şekilde olabilir:
```bash
Error: listen EADDRINUSE: address already in use 127.0.0.1:3000
```
Bu hata, Node.js'in belirli bir IP adresi ve port numarasını (bu örnekte `127.0.0.1:3000`) kullanmaya çalıştığı ancak bu portun zaten başka bir uygulama tarafından kullanıldığını gösterir. Yani, bir portun üzerine yazma yetkisine sahip olmamanızdan dolayı bu hatayı alırsınız.
Portun Kimliği: Hangi Uygulama Bu Portu Kullanıyor?
Şimdi, bu portu kullanan uygulamayı bulmamız gerekiyor. Çoğu zaman, terminal üzerinden şu komut ile kimlik tespiti yapabilirsiniz:
```bash
lsof -i :3000
```
Bu komut, `3000` portunu kullanan tüm işlemleri listeleyecektir. Eğer Windows kullanıyorsanız, PowerShell veya komut istemcisinde şu komutu kullanabilirsiniz:
```bash
netstat -ano | findstr :3000
```
Bu komutlar, ilgili portu hangi işlem numarasının (PID) kullandığını gösterecektir.
Portu Serbest Bırakmak: İşlem Sonlandırma
Portu kullanan işlemi bulduktan sonra, onu sonlandırarak portu serbest bırakabiliriz. Eğer Unix tabanlı bir işletim sistemi kullanıyorsanız, terminal üzerinden şu komutu verebilirsiniz:
```bash
kill -9 [PID]
```
Burada `[PID]`, önceki adımda bulduğunuz işlem kimliğidir. Windows üzerinde ise şu komut kullanılabilir:
```bash
taskkill /PID [PID] /F
```
Bu adımla, portu kullanan işlem sonlandırılacak ve portunuz tekrar kullanılabilir hale gelecektir.
Alternatif Çözüm: Farklı Bir Port Kullanın
Eğer yukarıdaki yöntemlerle portu serbest bırakmak istemiyorsanız ya da bu çözüm işe yaramazsa, yapabileceğiniz bir başka şey var: Uygulamanızın farklı bir portu kullanmasını sağlamak.
Node.js uygulamanızda kullanılan portu değiştirmek için aşağıdaki gibi bir yol izleyebilirsiniz:
```javascript
const express = require('express');
const app = express();
const port = process.env.PORT || 4000; // Yeni port
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
```
Bu kodda, `4000` portunu kullandık. Artık uygulamanız bu yeni port üzerinde çalışacaktır.
Hata Engelleme: Portu Her Zaman Kontrol Edin
Son olarak, bu hatanın tekrar etmemesi için bazı önlemler almakta fayda var. Uygulamanızı her başlatmadan önce, kullanılabilir portları kontrol eden küçük bir kontrol eklemek, hem sizin hem de uygulamanızın geleceği için faydalı olacaktır.
Örnek bir kontrol fonksiyonu:
```javascript
const net = require('net');
function isPortTaken(port) {
return new Promise((resolve, reject) => {
const server = net.createServer()
.once('error', (err) => {
if (err.code === 'EADDRINUSE') {
resolve(true); // Port kullanılıyor
} else {
reject(err);
}
})
.once('listening', () => {
server.close();
resolve(false); // Port kullanılmıyor
})
.listen(port);
});
}
isPortTaken(3000).then(isTaken => {
if (isTaken) {
console.log('Port 3000 already in use, please choose another one.');
} else {
console.log('Port 3000 is available!');
}
});
```
Bu kod, `3000` portunun kullanımda olup olmadığını kontrol eder ve sizi bilgilendirir. Böylece hatayı baştan engelleyebilirsiniz.
Sonuç: Bir Adım Daha İleriye
Node.js'in karşılaştığınız hatalarla başa çıkmak, zamanla alışacağınız bir şey olacak. EADDRINUSE hatası gibi basit ama can sıkıcı hatalarla karşılaşmak, sizi çözüm odaklı bir geliştirici yapar. Şimdi, öğrendiğiniz bu tekniklerle uygulamanızın gelişim sürecine hız katabilirsiniz.