Несколько вещей. Прежде всего, я думаю, что вам нужно сначала написать заголовки на res.writeHead
перед вызовом res.write
. Во-вторых, вы не можете просто удерживать соединение слишком долго по умолчанию, потому что значение времени ожидания установлено браузером. Если вы не отправите данные в течение этого времени, соединение будет разорвано. Поэтому вам нужно использовать res.writeProcessing
let output = null, data = result.data, id = result.id, eventName = result.eventName;
if (typeof data === "object") {
let result = rm.utils.stringify(data);
result = result ? result.split(/[\r\n]+/).map(str => 'data: ' + str).join('\n') : '';
output = (
(id ? "id: " + id + "\n" : "") +
(eventName ? "event: " + eventName + "\n" : "") +
(result || "Not available") + '\n\n'
);
}
res.result = output || data || "";
res.writeHead(200, {'Content-Type': 'application/json'});
res.write(output || data || "");
break;
Посмотрите на этот ответ , чтобы увидеть, как вы можете держать соединение открытым с помощью res.writeProcessing. Наконец, если вы хотите отправлять события, используйте веб-сокет для отправки событий с сервера.