Я пытаюсь создать конечную точку, которая будет получать запрос, отправлять данные запроса клиенту WebSocket, ждать события, а затем отправлять ответ обратно с помощью команды express + socketio. Этот вопрос похож на него: Ожидание события socketio внутри экспресс-маршрута
1) Получить запрос на http://localhost:3000/endpoint
2) Записать событие в веб-сокеты как 'req'
3) Дождаться события res от ws
4) Отправьте информацию о полученных событиях в качестве ответа экспресс.
Вот как я реализован:
server.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
var socket;
io.on('connection', function (s) {
socket = s;
});
http.listen(3000);
app.get('/endpoint', function (req, res) {
console.log('new request')
io.emit('req', { data: 'hello' });
socket.on('res', function (data) {
res.status(200).json(data);
});
});
index.html
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('req', (data) => {
console.log(data)
socket.emit('res', data);
});
</script>
Скрипт отлично работает для первого запроса на /endpoint
. Но если я снова нажму на ссылку, там будет написано
Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки
клиенту