Я устанавливаю свой сервер REST с помощью express.js. Теперь я хочу добавить sse на этот сервер. После того как я реализовал пакет sse this, я получаю сообщение об ошибке. Я знаю, что получаю эту ошибку, когда попытаюсь дважды использовать res.send
, но я не уверен.Как использовать сервер-отправленные события в express.js
ERROR: Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:690:11)
at ServerResponse.header (/home/root/node_modules/express/lib/response.js:718:10)
at ServerResponse.send (/home/root/node_modules/express/lib/response.js:163:12)
at app.get.str (/home/root/.node_app_slot/main.js:1330:25)
at Layer.handle [as handle_request] (/home/root/node_modules/express/lib/router/layer.js:95:5)
at next (/home/root/node_modules/express/lib/router/route.js:131:13)
at sse (/home/root/node_modules/server-sent-events/index.js:35:2)
at Layer.handle [as handle_request] (/home/root/node_modules/express/lib/router/layer.js:95:5)
at next (/home/root/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/home/root/node_modules/express/lib/router/route.js:112:3)
Возможно ли, что я больше не могу использовать экспресс-методы в функции sse? Например:
app.get('/events', sse, function(req, res) {
res.send('...');
});
Кроме того, я нашел this раствор и this. Можно ли использовать sse с функцией res.write
или другим способом без использования другого пакета?
Я просто использовал ваш res.set для заголовков и продолжал использовать res.write, и он отлично работает. В дополнение к этому, есть ли возможность закрыть SSE впоследствии? – Steckdoserich
Не удалось изменить это быстро: я использую res.end(); на данный момент, но тогда моя последняя функция вызвана для «400 - Bad Request». (Это не следует вызывать) И res.set («Соединение», «закрыть»); разрешается в ошибке. – Steckdoserich
Вы не должны закрывать SSE, так как это нарушает функциональность. Все дело в том, что это открытое HTTP-соединение. Это позволяет переносить новые события на клиента в любой момент. – baynezy