Я пытаюсь получить доступ к объекту сеанса из события 'upgrade', которое запускается сервером Node.js с использованием инфраструктуры Express.js. Я правильно настроил поддержку сеансов и могу получить к ней доступ из стандартных методов .get .post .put и .delete, например.
app.get('/', function(req, res) {
req.session.test = 'Hello world'; // Works fine
res.render('index');
});
Но если я подключу событие «обновить» на сервере следующим образом:
app.on('upgrade', function(req, socket) {
var message = req.session.test; // Doesn't work
});
Я не могу получить доступ к объекту сеанса. Насколько мне известно, промежуточное программное обеспечение Connect Session только подключает сеанс для методов get / post / put / delete, но не для пользовательских событий, таких как 'upgrade'.
К вашему сведению, событие «обновление» генерируется клиентом во время рукопожатия WebSocket, я пытаюсь получить доступ к сеансу из первоначального рукопожатия WebSocket. Сеансовый cookie определенно присутствует в заголовках HTTP во время рукопожатия, например:
app.on('upgrade', function(req, socket) {
var cookieHeader = req.headers['cookie'];
console.log(cookieHeader);
});
... выведет cookie сеанса Connect. Возможно, есть способ создать объект сеанса вручную с помощью необработанного маркера cookie сеанса?
Обновление: Говорили с некоторыми людьми в IRC-чате node.js, очевидно, это либо очень сложно, либо невозможно. Промежуточное ПО Connect не подвергается нестандартным / необычным событиям, таким как «обновление». Они сказали поднять проблему в Github, вот она:
https://github.com/senchalabs/connect/issues/342