Основная проблема заключается в том, что у вас есть маршрут внутри слушателя сокетного соединения. Маршрут должен быть зарегистрирован только один раз . И connection
запускается несколько раз.
const app = express();
app.use(express.static(`${__dirname}/public`));
const server = http.createServer(app);
const io = socketIo(server, {'force new connection': true });
app.post('/redirect', (req,res) => {
res.status(200).send('Redirected');
io.emit('redirect');
// io.to(someSocketOrRoom).emit('redirect');
});
io.on('connection', (socket) => {
console.log('New client connected');
});
Если вы хотите отправлять сообщения в сокет, когда вы получаете сообщение извне сокета, в данном случае это HTTP Post. Вам необходимо использовать io.emit
для передачи на все сокеты или io.to().emit
для передачи на конкретный.
Теперь нет смысла перенаправлять с помощью socket.io, если вы публикуете на /redirect
, почему бы вам просто не перенаправить пользователя с помощью res.redirect
, не испуская ничего.