Koa Session: MySQL

Koa Session: MySQL

本文关键字:MySQL Session Koa      更新时间:2023-09-26

如何将koa会话连接到mysql存储?它看起来还没有开发出mysql存储,所以我想我可以开发它。除了扩建商店,还有其他解决方案吗?

根据我之前的回答,我已经在github和npm上发布了这段代码。代码不应该是ahrd-tp扩展到其他关系数据库:

https://github.com/tb01923/koa-mysql-session

我正试图按照connect-mysql会话存储逻辑/SQL构建一个mysql-koa会话存储。我还研究了koa-redis和koa-generationalsession/memory_store的方法。从本质上讲,会话存储提供了一个具有get(sid)和set(sid,obj)方法的对象。

两个koa会话存储对象都有以下签名:

Store.prototype.get = function *(sid) {
  return session;
};
Store.prototype.set = function *(sid, val, ttl) { };
Store.prototype.destroy = function *(sid) { };

所以我把这些编码起来:

MysqlStore.prototype.get = function *(sid) {
    let connection = this.getConnection()
    let results = yield connection.query(GET_STATEMENT, [sid])
    let session = null ;
    if(results && results[0] && results[0][0] && results[0][0].data){
        session = JSON.parse(results[0][0].data);
    }
    return session
};
MysqlStore.prototype.set = function *(sid, session, ttl) {
    let expires = getExpiresOn(session, ttl).valueOf()
    let data = JSON.stringify(session);
    let connection = this.getConnection()
    let results = yield connection.query(SET_STATEMENT, [sid, expires, data, expires, data])
    return results
};
MysqlStore.prototype.destroy = function *(sid) {
    let connection = this.getConnection()
    let results = yield connection.query(DELETE_STATEMENT, [sid])
};

构造函数负责mysql连接池(通过co-mysql),并在DB中为会话设置表:

var MysqlStore = function (options) {
    this.getConnection = function(){
        let connection = mysql.createPool(options) ;
        return connection ;
    }
    this.setup = co(function*() {
        let connection = this.getConnection()
        let result = yield connection.query(CREATE_STATEMENT)
    })
    this.setup()
};

在某个时候,我会寻求一些建议,在github和NPM上发布这个解决方案。我想确保我首先尊重使用过的库和许可证。项目将在这里:https://github.com/tb01923/koa-mysql-session