событие истечения сеанса коа - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь записать сообщение, когда сеанс koa истекает. Но добавление прослушивателя для события expire, похоже, не работает для меня.

Ниже приведен пример кода. Установите 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 секунды в браузере, я вижу значение "views", установленное в 1, означающее, что предыдущий сеанс истек. Но оператор журнала как часть события с истекшим сроком действия не получает. Может быть, я добавляю прослушиватель событий неправильно. Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 27 июня 2018

После просмотра файлов библиотеки 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));

Если ключ содержит значение, вы должны увидеть что-то распечатанное в консоли:)

...