首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >koa会话到期事件

koa会话到期事件
EN

Stack Overflow用户
提问于 2018-06-27 11:40:55
回答 1查看 1.2K关注 0票数 1

我试图在考拉会话到期时记录一条消息。但是,为过期事件添加一个侦听器似乎对我不起作用。

下面是示例代码。将2分钟设置为会话的maxAge。

代码语言:javascript
运行
复制
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的“视图”值,这意味着上一次会话已经过期。但是,作为过期事件的一部分的log语句不会被击中。可能是添加事件侦听器的方式是错误的。有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 11:52:09

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

代码语言:javascript
运行
复制
if (value._expire && value._expire < Date.now()) {
  debug('expired session');
  this.emit('expired', { key, value, ctx });
  return false;
}

其中发射的是:

代码语言:javascript
运行
复制
emit(event, data) {
    setImmediate(() => {
      this.app.emit(`session:${event}`, data);
    });
}

因此,我认为在您的代码中,您应该更改您试图用以下方法捕获事件的名称:

代码语言:javascript
运行
复制
app.on('session:expired',(key,value,ctx) => console.log(key));

如果键包含一个值,则应在控制台中看到打印出来的内容:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51061905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档