Я искал способы уведомить клиента о завершении трудоемкой функции, но после того, как я уже ответил с помощью res.render ().
Пользователь Тенефф порекомендовал мне события, отправленные сервером, в частности этот пакет: https://www.npmjs.com/package/sse-express
Во всех примерах, которые я видел до сих пор, люди не используют sse с res.render (). Я попытался сделать это с помощью этого кода:
app.post('/pst', sseExpress, function(req, res)
{
var url = req.body.convo;
res.render('error.ejs');
res.sse('connected',
{ welcomeMsg: 'Hello world!' });
});
но я получил:
"Error: Can't set headers after they are sent."
Так можно ли отправить sse после res.render ()?
So is it possible to send a sse after a res.render()?
Нет.
В любом случае это не имеет смысла.
Вы либо делаете обычный запрос, ожидая регулярного ответа (в этом случае вы должны использовать res.render()
, либо вы делаете запрос на поиск SSE с использованием let eventSource = new EventSource('http://localhost:80/updates');
, и в этом случае все ответы на него должны быть через res.sse()
.
@ user1584421 - У вас будет аналогичная проблема с синхронизацией.
Спасибо! Тогда могу я попробовать другой способ? Могу ли я выполнить res.render (), а затем использовать socketIO для отправки сообщения клиенту на отображаемую страницу о том, что задача выполнена? (И это разблокирует скрытый div на отображаемой странице со ссылкой)