Как я могу сохранить переменные в сеансе с несколькими пользователями, используя socket.io? - PullRequest
0 голосов
/ 10 января 2020

Вот базовая c структура моего кода.

//Route Handler that fires when user 'creates a session'
app.post('/route', async (req, res) => {

    let var1 = [];
    let var2 = [];

    io.on('connection', (socket) => {

        //Use var1 and var2 here

        socket.on('event', () => {
            // Use var1 and var2 here
        });


    });


});

Мой код работает, пока один сеанс был создан и код запущен. Естественно, когда второй пользователь получает доступ к маршруту, он изменяет переменные для текущих сеансов, вызывая нежелательное поведение.

Я не хочу, чтобы мои переменные создавались для каждого соединения, а скорее для каждого события, известного как 'sessionMade', поэтому я помещаю переменные вне метода on connection. Если я вложу переменные в метод сокета, я не смогу использовать их для других методов socket.on.

Есть ли способ, которым я могу заключить все сокеты и глобальные переменные в один сеанс? Буду признателен за любую помощь, спасибо.

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Вы должны использовать express -сессион

const app = express()
const session = require('express-session');
const options = {
    name: 'foo',
    store: this.store,
    secret: 'bar', 
    saveUninitialized: true, 
    resave: false,
    rolling: true 
};

const middleware = session(options);
app.use(middleware)

В маршрутах. js или в любом файле обработчика, созданном для указанного c маршрута:

handler(req, res, next) {
     req.session.someField = 'foo';
     req.session.save();
}

Проверить out express -session здесь

Если вы хотите использовать внешнее хранилище сеансов, Redis - хороший выбор. Проверьте этот учебник.

0 голосов
/ 10 января 2020

А как насчет того, чтобы сделать их глобальными?

let var1 = [];
let var2 = [];
//Route Handler that fires when user 'creates a session'
app.post('/route', async (req, res) => {   
    io.on('connection', (socket) => {

        //Use var1 and var2 here

        socket.on('event', () => {
            // Use var1 and var2 here
        });
    });   
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...