Я использую Socket.io
в приложении чата, которое я создаю. Я пытаюсь настроить сеанс так, чтобы я мог сохранять логин пользователей между сеансами.
Вот соответствующий код:
index.js (сервер)
var cookieParser = require('cookie-parser')();
var session = require('cookie-session')({ secret: 'secret' });
app.use(cookieParser);
app.use(session);
io.use(function(socket, next) {
var req = socket.handshake;
var res = {};
cookieParser(req, res, function(err) {
if (err) return next(err);
session(req, res, next);
});
});
io.on('connection', function(socket){
socket.on('test 1', function(){
socket.handshake.test = 'banana';
});
socket.on('test 2', function(){
console.log(socket.handshake.test);
});
});
chat.js (клиент)
var socket = io();
socket.emit('test 1');
socket.emit('test 2');
В приведенном выше коде, он будет печатать banana
на консоли, как ожидалось. Однако, если я прокомментирую "тест 1" так:
var socket = io();
// socket.emit('test 1');
socket.emit('test 2');
Он напечатает undefined
на консоли.
Должна ли она печатать banana
, так как она использует сеанс и сохраняется между запросами? Я также сталкиваюсь с той же проблемой, если я инвертирую порядок, в котором я называю "тест 1" и "тест 2".
Что я делаю неправильно? Что мне не хватает для того, чтобы сессия сохранялась, как ожидалось?