1. Sunucu Loglarını Kontrol Edin
Hata ile karşılaştığınızda, ilk yapmanız gereken şey, sunucunuzun loglarını kontrol etmektir. Express, genellikle bir hata meydana geldiğinde loglarınıza yazılar gönderir. Ancak bazen bir şeyler ters gider ve bu loglar size yardımcı olabilir. İlk olarak sunucunuzu başlatın ve terminalde aşağıdaki gibi bir komut kullanarak logları kontrol edin:
node app.js
Eğer herhangi bir hata mesajı görüyorsanız, bu mesaj size hatanın nerede olduğunu gösterebilir. Genellikle, bağlantı hataları, veri tabanı bağlantı sorunları veya port çakışmaları bu tür bir hataya yol açar.
2. Port Çakışmalarını Kontrol Edin
Sunucunun "not responding" hatası alması, genellikle port çakışmalarından kaynaklanabilir. Eğer Express uygulamanız başka bir uygulama ile aynı portu kullanıyorsa, bu bir sorun yaratabilir. Hangi portu kullandığınızı görmek için Express uygulamanızdaki port numarasını kontrol edin:
app.listen(3000, () => {
console.log('Sunucu 3000 portunda çalışıyor');
});
Eğer başka bir uygulama bu portu kullanıyorsa, farklı bir port numarası seçmek en basit çözüm olacaktır. Portu değiştirmek için:
app.listen(3001, () => {
console.log('Sunucu 3001 portunda çalışıyor');
});
3. Middleware ve Route Problemlerini Gözden Geçirin
Express uygulamanızda, middleware’ler ve route’lar sunucunun yanıtını etkileyebilir. Bazı middleware’ler, hatalı çalıştığında sunucunun yanıtsız kalmasına neden olabilir. Özellikle async/await kullanımında dikkat edilmesi gereken bir durum vardır. Beklenen veri gelmeden bir işlem yapılmaya çalışıldığında, sunucu zaman aşımına uğrayabilir. Aşağıdaki gibi bir hatalı middleware kodu buna örnektir:
app.use(async (req, res, next) => {
const data = await fetchDataFromDatabase(); // Bu, beklenen yanıtı zamanında alamayabilir.
next();
});
Burada `fetchDataFromDatabase` fonksiyonu, veritabanından veri almak için zaman alabilir. Bu işlem tamamlanmadan `next()` fonksiyonu çalıştırılırsa, Express sunucusu yanıt veremeyebilir. Sorunu çözmek için doğru async işlemleri kullanmak önemlidir.
4. Timeout Ayarlarını Kontrol Edin
Bazı durumlarda, sunucunuzun yanıt verememesinin nedeni, işlem süresinin çok uzun olması ve zaman aşımına uğraması olabilir. Express’te timeout ayarlarıyla bu durumu engelleyebilirsiniz. Aşağıdaki gibi bir kodla timeout süresini artırabilirsiniz:
app.use((req, res, next) => {
res.setTimeout(5000, () => { // Timeout süresi 5 saniye
res.status(408).send('Request Timeout');
});
next();
});
Bu işlem, yanıt sürelerini kontrol altında tutmanıza yardımcı olacaktır.
5. Veritabanı Bağlantısı Problemlerini Kontrol Edin
Veritabanı bağlantısı sorunları da "not responding" hatasına yol açabilir. Özellikle veritabanı bağlantıları, doğru şekilde kapatılmadığında veya zaman aşımına uğradığında, sunucunun yanıt verememesine neden olabilir. Bu durumda, veritabanı bağlantınızı şu şekilde kontrol edin:
mongoose.connect('mongodb://localhost/mydb', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
console.log('Veritabanına bağlanıldı');
})
.catch(err => {
console.log('Veritabanı bağlantı hatası:', err);
});
Eğer veritabanı bağlantınızda bir sorun varsa, doğru hata mesajını alarak problemi çözebilirsiniz.
6. Sunucu Yeniden Başlatma ve Cache Temizleme
Bazen, "not responding" hatası sunucunuzun takılmasından kaynaklanabilir. Bu durumda yapmanız gereken en basit şey, sunucuyu yeniden başlatmaktır. Terminalde şu komutu çalıştırarak Express sunucunuzu yeniden başlatabilirsiniz:
ctrl + c
node app.js
Bunun dışında, bazı cache sorunları da sunucunun yanıtsız kalmasına yol açabilir. Cache'i temizlemek için uygulamanızı temiz bir şekilde yeniden başlatmak faydalı olacaktır.
Sonuç
Evet, şimdi Express sunucusundaki "Not Responding" hatasının neden kaynaklandığını ve nasıl çözüleceğini öğrendiniz. Hataların çoğu, doğru logları kontrol ederek, port çakışmalarını engelleyerek, middleware ve async işlemleri dikkatle yöneterek çözülebilir. Unutmayın, sabırlı olmak ve her zaman adım adım ilerlemek en doğru çözüm yoludur.
İyi kodlamalar!