koa会话过期事件
koa session expire event
我正在尝试在 koa 会话过期时记录消息。但是为过期事件添加监听器似乎对我不起作用。
示例代码如下。将会话的 maxAge 设置为 2 分钟。
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,这意味着前一个会话已过期。但是作为过期事件一部分的日志语句没有被命中。可能是我添加事件监听器的方式不对。有人可以帮忙吗?
查看库文件后,koajs/session -> context.js
if (value._expire && value._expire < Date.now()) {
debug('expired session');
this.emit('expired', { key, value, ctx });
return false;
}
发射是:
emit(event, data) {
setImmediate(() => {
this.app.emit(`session:${event}`, data);
});
}
所以我认为在您的代码中您应该更改您尝试捕获事件的名称:
app.on('session:expired',(key,value,ctx) => console.log(key));
如果键包含一个值,您应该会在控制台中看到打印出来的内容:)
我正在尝试在 koa 会话过期时记录消息。但是为过期事件添加监听器似乎对我不起作用。
示例代码如下。将会话的 maxAge 设置为 2 分钟。
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,这意味着前一个会话已过期。但是作为过期事件一部分的日志语句没有被命中。可能是我添加事件监听器的方式不对。有人可以帮忙吗?
查看库文件后,koajs/session -> context.js
if (value._expire && value._expire < Date.now()) {
debug('expired session');
this.emit('expired', { key, value, ctx });
return false;
}
发射是:
emit(event, data) {
setImmediate(() => {
this.app.emit(`session:${event}`, data);
});
}
所以我认为在您的代码中您应该更改您尝试捕获事件的名称:
app.on('session:expired',(key,value,ctx) => console.log(key));
如果键包含一个值,您应该会在控制台中看到打印出来的内容:)