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。