如何使用nodejs和express向会话(redis)添加事件监听器?

Nat*_*ner 3 session redis node.js express

我希望每当用户的会话被销毁/超时时运行一个函数.在使用redis会话存储的express中使用nodejs有办法吗?

pyr*_*ick 7

会话商店本身继承自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);
  };
Run Code Online (Sandbox Code Playgroud)

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

然后你可以绑定到"破坏"事件......

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' })
);
Run Code Online (Sandbox Code Playgroud)