【问题标题】:how can I add an event listener to a session (redis) with nodejs and express?如何使用 nodejs 将事件侦听器添加到会话(redis)并表达?
【发布时间】:2011-12-07 10:02:13
【问题描述】:

我想在用户会话被破坏/超时时运行一个函数。有没有办法使用redis会话存储在nodejs中使用express?

【问题讨论】:

    标签: session node.js redis express


    【解决方案1】:

    会话存储本身继承自 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

    您可以很容易地 fork 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');
      };
    

    那么你可以绑定到“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' })
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2023-03-05
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多