# Hata Nedir?
Ancak, bazen kodun içinde istemeden birden fazla kez yanıt göndermeye çalışırsınız. Bu da "Cannot set headers after they are sent to the client" hatasını tetikler.
# Hata Nasıl Ortaya Çıkar?
app.get('/api', (req, res) => {
res.send('Hello, world!');
res.send('This will cause an error');
});
Yukarıdaki kodda, bir istek alındığında ilk olarak "Hello, world!" yanıtı gönderiliyor. Ancak hemen ardından, ikinci bir `res.send()` çağrısı yapılıyor. Bu ikinci çağrı hataya neden olacaktır çünkü bir yanıt zaten gönderildiği için başlıklar bir kez daha gönderilemez.
# Hata Çözümü
Birinci ve en önemli adım, her yanıt gönderme işleminden sonra kodun başka bir yerde yanıt göndermemesini sağlamaktır. Bunu nasıl kontrol edebilirsiniz? Basit bir örnek üzerinden görelim:
app.get('/api', (req, res) => {
if (someCondition) {
res.send('Condition met!');
return; // return ile işlem sonlandırılır
}
res.send('No condition met.');
});
Bu örnekte, `someCondition` doğruysa, ilk `res.send()` çağrısı yapılır ve ardından `return` ile işlem sonlandırılır. Bu şekilde, ikinci bir yanıt gönderilmesi engellenir. Eğer `someCondition` yanlışsa, diğer yanıt gönderilecektir.
# Hata "Asenkron İşlemler"den Kaynaklanabilir
Örneğin:
app.get('/api', async (req, res) => {
setTimeout(() => {
res.send('This should be the last response!');
}, 1000);
res.send('This will cause an error');
});
Yukarıdaki kodda, `res.send()` işlemleri sırasıyla yapılır. İlk `res.send()` hemen çalıştırılırken, `setTimeout` içinde bekleyen ikinci `res.send()` bir süre sonra çalıştırılır. Ancak bu işlemde, ilk `res.send()` yanıtı gönderildikten sonra başka bir `res.send()` çağrısı yapılacağı için hata alırsınız.
Bu sorunu çözmek için asenkron işlemleri doğru şekilde yönetmek gerekir. Örneğin:
app.get('/api', async (req, res) => {
await new Promise(resolve => setTimeout(resolve, 1000));
res.send('This should be the last response!');
});
Bu şekilde, ikinci `res.send()` çağrısı yalnızca ilk işlem tamamlandıktan sonra yapılır. Asenkron işlemlerin yönetimi, hataların önlenmesine yardımcı olur.
# Genel İpuçları:
2. Asenkron İşlemleri İyi Yönetin: Asenkron işleme tabi olan kodlarınızda, yanıt gönderme işlemlerini doğru sırayla yapmalısınız.
3. `return` Anahtar Kelimesini Kullanın: Yanıt gönderildikten sonra fonksiyonu sonlandırmak için `return` kullanın.
4. Hataları Kontrol Edin: Hata durumunda bile, bir yanıt göndermeyi engellemek için kontrol yapmayı unutmayın.
###