首页 文章

koa Session 到期事件

提问于
浏览
0

我试图在koa会话到期时记录消息 . 但是为过期事件添加一个监听器似乎对我没用 .

以下是示例代码 . 为会话设置2分钟作为maxAge .

import koa from 'koa';
import serve from 'koa-static';
import route from 'koa-route';
import session from 'koa-session';
import mount from 'koa-mount';

let pub = new koa();
let parse = new koa();
let app = new koa();

app.keys = ['test'];

const CONFIG = {
    key: 'sess',
    maxAge: 2000
};

parse.use(ctx => {
    // ignore favicon
    if (ctx.path === '/test') return;

    let n = ctx.session.views || 0;
    ctx.session.views = ++n;
    ctx.body = n + ' views';
    console.log(ctx.session);
});

pub.use(serve('./public'));

app.use(session(CONFIG,app));
app.on('expired',(key,value,ctx) => console.log(key));

app.use(mount('/',pub));
app.use(mount('/parse',parse));


app.listen(8080);

每次我在浏览器中2秒后刷新页面时,我都可以看到“视图”值设置回1意味着前一个会话已经过期 . 但是作为过期事件的一部分的日志语句没有被击中 . 可能是添加事件监听器错误的方式 . 有人可以帮忙吗?

1 回答

  • 0

    看看库文件后,koajs / session - > context.js

    if (value._expire && value._expire < Date.now()) {
      debug('expired session');
      this.emit('expired', { key, value, ctx });
      return false;
    }
    

    其中emit是:

    emit(event, data) {
        setImmediate(() => {
          this.app.emit(`session:${event}`, data);
        });
    }
    

    因此,我认为在您的代码中,您应该更改您尝试捕获事件的名称:

    app.on('session:expired',(key,value,ctx) => console.log(key));
    

    如果key包含一个值,你应该看到在控制台中打印出来的东西:)

相关问题