Javascript 如何使用socket.io在多个用户的会话中保留变量?

Javascript 如何使用socket.io在多个用户的会话中保留变量?,javascript,express,socket.io,Javascript,Express,Socket.io,下面是我的代码的基本结构 //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('e

下面是我的代码的基本结构

//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方法


是否有一种方法可以将所有套接字和全局变量封装在一个会话中?非常感谢您的帮助。

让它们全球化怎么样

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
        });
    });   
});

您应该使用快速会话

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)
在routes.js或为特定路由创建的任何处理程序文件中:

handler(req, res, next) {
     req.session.someField = 'foo';
     req.session.save();
}
查看快速会话

如果您想使用外部会话存储,redis是一个不错的选择。
查看教程

这可能会导致多个用户出现很多错误,而且不安全。感谢您的帮助。redis是作为express session的替代品还是与之结合使用?@Raja redis不是express session的替代品。它用于缓存数据,最准确地说是缓存会话。您仍需要在应用程序中使用express session。