Как я могу добавить прослушиватель событий в сеанс (redis) с помощью nodejs и Express? - PullRequest
3 голосов
/ 14 октября 2011

Я хотел бы запускать функцию всякий раз, когда сеанс пользователя разрушается / время ожидания истекло. Есть ли способ сделать с помощью nodejs с помощью экспресс-хранилища сеансов redis?

1 Ответ

7 голосов
/ 07 мая 2012

Сами хранилища сеансов наследуются от EventEmitter:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session/store.js

Хотя ни одна из реализаций не генерирует события для привязки, включая хранилище redis:

https://github.com/visionmedia/connect-redis/blob/master/lib/connect-redis.js

Вы можете довольно легко разветвлять connect-redis и взламывать эти события в себе, чтобы вы могли связываться с ними там, где вам нужно ....

RedisStore.prototype.destroy = function(sid, fn){
    sid = this.prefix + sid;
    this.client.del(sid, fn);
  };

становится

RedisStore.prototype.destroy = function(sid, fn){
    sid = this.prefix + sid;
    this.client.del(sid, fn);
    this.emit('destroy');
  };

Тогда вы можете привязаться к событию "уничтожить" ...

var connect = require('connect')
      , RedisStore = require('connect-redis')(connect);

var store = new RedisStore;

store.on('destroy', function() {
  // session was destroyed
});

connect.createServer(
  connect.cookieParser(),
  connect.session({ store: store, secret: 'keyboard cat' })
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...