Koa会话:MySQL

一个人如何将koa会话连接到一个mysql存储? 它看起来不像一个MySQL商店已经开发,所以我想我可以开发。 有没有其他解决scheme,而不是build立商店?

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

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

我正在尝试build立一个mysql连接mysql会话存储逻辑/ SQL之后的会议存储库 。 我也正在考虑koa-redis和koa-generic-session / 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 )的构造函数,并在会话的数据库中设置表:

 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() }; 

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