Сессия Коа: MySQL

Как подключить сеанс koa к хранилищу mysql? Не похоже, что хранилище mysql еще не разработано, поэтому я полагаю, что мог бы его разработать. Есть ли другие решения, кроме как построить магазин?


person akaphenom    schedule 15.09.2014    source источник


Ответы (2)


из моего предыдущего ответа я опубликовал этот код на github и npm. Код не должен распространяться на другие реляционные БД:

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

person akaphenom    schedule 21.09.2014

Я пытаюсь создать хранилище сеансов mysql koa после подключения 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()
};

В какой-то момент я попрошу совета, чтобы опубликовать это решение на github и NPM. Я хочу сначала убедиться, что я соблюдаю использованные библиотеки и лицензии. Проект будет здесь: https://github.com/tb01923/koa-mysql-session

person akaphenom    schedule 16.09.2014