squadbrodyaga
@squadbrodyaga
帆は風を変えた

Дублируются сообщения в чате (Socket.io), что делать?

Здравствуйте, делаю чат с помощью socket.io. Решил некоторые проблемы из предыдущих вопросов,
но появилась новая проблема.
  1. Запускаю сервер и пишу сообщение в чат — всё хорошо, сообщение отправляется.
  2. Обновляю страницу и вновь пишу сообщение — отправляется сразу 2 сообщения.

И так далее, сколько раз обновляешь страницу — столько раз повторяется сообщение.

Мой код:
app.get('/index', async (req, res) => { 
    res.sendFile(path.join(__dirname, './HTML', 'index.html'))

    io.on('connection', socket => {
        socket.on('Отправить сообщение', (data) => {
            io.emit('Добавить сообщение', {
                msg: data,
                login: req.session.user.login
            })
        })
    })
})

Проблема: Как я понял, косяк в том, что при каждом GET запросе сокет дублируется,
но я не могу писать Socket-код не в GET запросе, потому что тогда у меня не будет доступа к request,
а он нужен мне для того, чтобы отправить login человека, написавшего сообщение.

  
  • Вопрос задан
  • 542 просмотра
Решения вопроса 1
squadbrodyaga
@squadbrodyaga Автор вопроса
帆は風を変えた
Решил проблему. Нужно было создать кое-какой Middleware
const session = require('express-session')
const express = require('express')
const app = express()

const server = require('http').Server(app)
const io = require('socket.io')(server)

const sessionMiddleware = session({
    secret: '...',
    saveUninitialized: false,
    resave: false,
    store: ...
})

app.use(sessionMiddleware)
io.use((socket, next) => {
    sessionMiddleware(socket.request, {}, next)
})

io.on('connect', socket => {

    const session = socket.request.session
    
    // Используем примерно так:
    session.user.login
    
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы