Client-Seite sieht wie folgt aus:Warum löst diese EventSource wiederholt eine Nachricht und einen Fehler aus?
var es = new EventSource("http://localhost:8080");
es.addEventListener("message", function(e) {
alert("e.data") //Alerts "" every couple seconds
})
es.addEventListener("error", function(e) {
alert("error") //Also fires every couple of seconds
})
var post_request = new XMLHttpRequest();
post_request.open("POST", "http://localhost:8080");
post_request.setRequestHeader("Content-Type", "text/plain");
post_request.addEventListener("readystatechange", function() {
if (post_request.readyState == 4 && post_request.status == 200) {
alert(post_request.responseText); //This works
}
})
post_request.send("This is a test")
Server-Seite node.js Anfrage POST Umgang mit dieser wie folgt aussieht:
function process_request(request, response) {
var request_body = []
request.on("data", function(chunk) {
request_body.push(chunk)
})
request.on("end", function() {
request_body = Buffer.concat(request_body).toString()+"\n"
response.writeHead(200, {"Access-Control-Allow-Origin": "*",
"Content-Type": "text/event-stream",
"Connection": "keep-alive"
});
response.end("data: " + request_body + "\n");
})
}
Wenn ich POST-Anforderungsdaten von der Client-Seite zu senden, es mir zurückgegeben wird mit response.end()
wie erwartet, aber es
löst alle paar Sekunden einen Fehler aus, zusätzlich zu einem message
Ereignis alle paar Sekunden. Wenn das Ereignis message
ausgelöst wird, wird jedoch gemeldet ""
, und ich bin mir nicht sicher warum? Kann mir jemand helfen, dieses Verhalten herauszufinden?
EDIT: Nur die es.readyState
auf den message
und error
Ereignisse überprüft. readyState
ist 0
auf der error
, so scheint es, als könnte es ein Ergebnis der Trennung sein. Warum würde diese wiederholte Trennung passieren? Und warum wiederholte Verbindung und Trennung wiederholt message
Ereignisse verursachen?
Für eine Sache, '" Dies ist ein Test "' ist kein gültiger Inhalt in 'text/event-stream'. Hast du versucht, eine gültige Antwortstelle zu schreiben? – mscdex
@mscdex Ich habe es bearbeitet, um es zu einem gültigen 'text/event-stream' Inhalt zu machen. Was nun passiert, ist, dass die 'es' alle paar Sekunden sowohl ein 'Nachricht'-Ereignis als auch ein' Fehler'-Ereignis auslöst. Beim 'Nachricht'-Ereignis alert 'alert (e.data)' jedoch eine leere Zeichenkette? – digglemister