app.post("/yoneticiAdminPanel", function(req, res, next) {
var interval = setInterval(() => {
req.session.hatirlatmalar.forEach(element => {
var d = new Date()
d = d.toLocaleString().split("-")
var sonDate = d[0] + "-" + d[1] + "-" + d[2]
console.log(element)
if (element.zaman == sonDate) {
res.json({
"durum": 1
})
clearInterval(interval);
}
});
},1000)
})ajax tarafında ise: $(document).ready(() =>{
$.ajax({
url : "/yoneticiAdminPanel",
type : "POST",
dataType : "JSON",
success : function(result){
if(result.durum == 1){
alert("Alarm vakti!")
window.location.reload()
}
}
})
})______________________Arkadaşlar selam,
Geçenlerde bir konu açmıştım array oluşturup serverda sürekli response göndermem gerekiyordu. Bunu sadece 1 kez ypaabiliyorum server side da. Fakat birçok kez yapmam gerektiği için websocket veya socket.io kullanmam gerek.
İlk baş database içindeki istediğim tablodaki verileri çekiyorum.
var sqlForHatirlatmadanBilgiCekme = `SELECT *
FROM tbl_hatirlatmalar
WHERE isyeri_id = ${result.recordset[0].isyeri_id}
AND hatirlatildimi = 0
ORDER BY hatirlatmaZamani DESC`
var conForHatirlatmadanBilgiCekme = new sql.Request();
conForHatirlatmadanBilgiCekme.query(sqlForHatirlatmadanBilgiCekme, function(err, resultForHatirlatmadanBilgiCekme) {
})Sonra çektiğim verileri bir sessiona atıyorum.request.session.hatirlatma = resultForHatirlatmadanBilgiCekme.recordset
request.session.hatirlatmalar = [];
for (var i = 0; i < request.session.hatirlatma.length; i++) {
request.session.hatirlatma[i].hatirlatmaZamani = request.session.hatirlatma[i].hatirlatmaZamani.toLocaleString().split("-")
zaman = request.session.hatirlatma[i].hatirlatmaZamani[0] + "-" +request.session.hatirlatma[i].hatirlatmaZamani[1] + "-" + request.session.hatirlatma[i].hatirlatmaZamani[2]
request.session.hatirlatmalar.push({
zaman: zaman,
metin: request.session.hatirlatma[i].hatirlatmaMetni
});
}Ardından client tarafında bir ajax post metodu oluşturuyorum dönen veriyi kontrol edip alert çıkartabileyim.$(document).ready(() =>{
$.ajax({
url : "/yoneticiAdminPanel",
type : "POST",
dataType : "JSON",
success : function(result){
if(result.durum == 1){
alert("Alarm vakti!")
}
}
})
})Sonrasında ise post sorgusunu oluşturuyorum server side da.app.post("/yoneticiAdminPanel", function(req, res) {
console.log(req.session.hatirlatmalar)
setInterval(() => {
req.session.hatirlatmalar.forEach(element => {
var d = new Date()
d = d.toLocaleString().split("-")
var sonDate = d[0] + "-" + d[1] + "-" + d[2]
if (element.zaman == sonDate) {
res.json({
"durum": 1
})
}
});
}, 1000)
})Bu kod ilk seferinde çalışıyor.yani ilk zaman ve date eşleşmesinde alert çıkıyor. İkinci eşleşmede ise server kendini kapatıyor. Çıkan error ise şu._http_outgoing.js:485
throw new ERR_HTTP_HEADERS_SENT('set');
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.header (D:\Proje\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (D:\Proje\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (D:\Proje\node_modules\express\lib\response.js:267:15)
at D:\Proje\server.js:672:9
at Array.forEach (<anonymous>)
at Timeout._onTimeout (D:\Proje\server.js:667:29)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7) {
code: 'ERR_HTTP_HEADERS_SENT'Bunun sebebi bir adet request alıp birden çok response göndermeye çalışmak olduğunu düşünüyorum. Bunu yapmanın en iyi yolu ise websocket veya socket.io kullanmakmış. Bana bu yolda yardım edip yolu yordamı öğretebilecek birisi var mı arkadaşlar? Yardıma ihtiyacım var acilen!