1

koa-session を mysql ストアに接続するにはどうすればよいですか? mysql-store はまだ開発されていないようなので、開発できると思います。ストアを構築する以外に解決策はありますか?

4

2 に答える 2

0

connect mysql-session-storeロジック / SQLに従って mysql koa セッション ストアを構築しようとしています。また、アプローチのためにkoa-rediskoa-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])
};

( co-mysql経由で) 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

于 2014-09-16T13:17:06.590 に答える