Запрос отдельных элементов данных (содержимого index2.html в вашем примере) с последующим закрытием соединения - это не то, для чего предназначен EventSource;вместо этого он предназначен для того, чтобы держать сокет открытым, чтобы в будущем сервер мог отправить больше данных клиенту.Здесь вы должны использовать простое соединение AJAX.
Но вы все равно сможете использовать EventSource
.Первое исправление заключается в том, что ему нужен собственный MIME-тип, не указывайте text / html.
res.writeHead(200, { "Content-Type": "text/event-stream" });
Во-вторых, протокол SSE означает, что каждый блок данных имеет префикс «data:» и суффикс двух.ЛФ.Таким образом, ваша строка должна выглядеть следующим образом:
res.write("data:" + index + "\n\n");
Вы, очевидно, должны убедиться, что index
не содержит \n
.Поскольку это HTML, вы можете преобразовать их все в пробелы (если у вас нет <pre>
блоков!).Более общее решение состоит в том, чтобы обернуть любые данные в объект JSON, а затем распаковать этот JSON на клиенте.
Наконец, код на стороне клиента в вашем вопросе имеет опечатку ""
при выдачеURL.Я предполагаю, что это была опечатка только при написании вопроса!Но если он будет в вашем оригинале, это также перестанет все работать :-) Используйте инструменты разработчика в вашем браузере, чтобы уловить подобные проблемы (и увидеть, как данные SSE передаются взад и вперед, так что вы также можете устранить другие проблемы,такие как брандмауэры).