我遇到了Socket.io的问题。我有一个node.js服务器,它使用READ.ME中的代码 我最初创建它时套接字工作正常,但是当我刷新页面时,客户端的套接字就丢失了。
以下是我服务器上的代码:
'use strict';
const app = require('express')();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const bodyParser = require('body-parser');
const messageRoutes = require('./routes/messages');
const db = require('./models');
const session = require("express-session")({
secret: "my-secret",
resave: true,
saveUninitialized: true
});
const sharedsession = require("express-socket.io-session");
app.use(session);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
io.use(sharedsession(session, {
autoSave: true
}));
io.on('connection', socket => {
socket.on("login", function (userdata) {
socket.handshake.session.userdata = userdata;
socket.handshake.session.save();
const { username } = userdata;
const loggedInMessage = {
message: `${username} has logged in`
}
console.log(loggedInMessage.message);
socket.broadcast.emit('chat message', loggedInMessage);
});
socket.on("logout", function (userdata) {
if (socket.handshake.session.userdata) {
console.log(`${socket.handshake.session.userdata.username} has disconnected`);
delete socket.handshake.session.userdata;
socket.handshake.session.save();
}
});
});
// Setting up Routes
app.use("/api/messages", messageRoutes);
http.listen(3001, () => {
console.log('Listening on port 3001');
});
如您所见,我导入了express-session
,然后导入了express-socket.io-session
。然后我将sharedsession
中间件附加到io
实例上。
之后,我为登录和注销事件定义了我的监听器。当新用户登录时,我将他的userdata保存在我的会话对象中并保存。
问题是,当我刷新页面时,套接字丢失了,我无法访问客户端的会话对象。
我该如何解决这个问题?