如何将 koa-session 连接到 mysql 商店?它看起来还没有开发 mysql-store,所以我想我可以开发它。除了建立商店之外,还有其他解决方案吗?
问问题
1092 次
2 回答
1
根据我之前的回答,我已将此代码发布到 github 和 npm 上。代码不应该是 ahrd tp 扩展到其他关系数据库:
于 2014-09-21T18:46:46.817 回答
0
我正在尝试按照连接mysql-session-store逻辑/SQL 构建一个 mysql koa 会话存储。我也在寻找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()
};
在某个时候,我会寻求一些建议以在 github 和 NPM 上发布此解决方案。我想确保我首先尊重使用过的库和许可证。该项目将在这里:https ://github.com/tb01923/koa-mysql-session
于 2014-09-16T13:17:06.590 回答