Tôi đang cố gắng tạo một ứng dụng trò chuyện dựa trên Node.js. Tôi muốn ép buộc máy chủ websocket (thư viện ws) sử dụng hệ thống phiên ExpressJS. Thật không may, tôi đã bị mắc kẹt. Các băm MemoryStore được sử dụng để lấy dữ liệu phiên khác với các ID phiên trong cookie. Ai đó có thể giải thích cho tôi những gì tôi đang làm sai?ExpressJS & Websocket & phiên chia sẻ
WebSocket mã máy chủ phần: định nghĩa đối tượng
module.exports = function(server, clients, express, store) {
server.on('connection', function(websocket) {
var username;
function broadcast(msg, from) {...}
function handleMessage(msg) {...}
express.cookieParser()(websocket.upgradeReq, null, function(err) {
var sessionID = websocket.upgradeReq.cookies['sid'];
//I see same value in Firebug
console.log(sessionID);
//Shows all hashes in store
//They're shorter than sessionID! Why?
for(var i in store.sessions)
console.log(i);
store.get(sessionID, function(err, session) {
websocket.on('message', handleMessage);
//other code - won't be executed until sessionID in store
websocket.on('close', function() {...});
});
});
});
}
cửa hàng: cấu hình
var store = new express.session.MemoryStore({
reapInterval: 60000 * 10
});
ứng dụng:
app.configure(function() {
app.use(express.static(app.get("staticPath")));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
store: store,
secret: "dO_ob",
key: "sid"
}));
});
Một phần của mã chính:
var app = express();
var httpServer = http.createServer(app);
var websocketServer = new websocket.Server({server: httpServer});
httpServer.listen(80);
Mẫu gỡ lỗi đầu ra:
- websocket.upgradeReq.headers.cookie "sid=s%3A64a%2F6DZ4Mab8H5Q9MTKujmcw.U8PJJIR%2BOgONY57mZ1KtSPx6XSfcn%2FQPZ%2FfkGwELkmM"
- websocket.upgradeReq.cookies["sid"] "s:64a/6DZ4Mab8H5Q9MTKujmcw.U8PJJIR+OgONY57mZ1KtSPx6XSfcn/QPZ/fkGwELkmM"
- i "64a/6DZ4Mab8H5Q9MTKujmcw"
đơn giản, workaround xấu xí giúp: sessionid = sessionID.match (/: [a-zA-Z0-9/+] + \ ./) [0]. slice (1, -1), nhưng tôi muốn giải quyết vấn đề này. – skorczan
Cảm ơn bạn đã giải quyết vấn đề này, đã giúp tôi :) Bạn đã bao giờ tìm được giải pháp thích hợp cho điều này chưa? – Tim