hostr/lib/redis.js

59 lines
1.4 KiB
JavaScript

import redis from 'redis-url';
import coRedis from 'co-redis';
import koaRedis from 'koa-redis';
import session from 'koa-generic-session';
import debugname from 'debug';
const debug = debugname('hostr:redis');
const redisUrl = process.env.REDIS_URL || process.env.REDISTOGO_URL || 'redis://localhost:6379';
const connection = new Promise((resolve, reject) => {
debug('Connecting to Redis');
resolve(redis.connect(redisUrl));
}).catch((err) => {
debug('Connection error: ' + err);
});
const redisSession = new Promise((resolve, reject) => {
return connection.then((client) => {
client = koaRedis({client: client});
resolve(session({
key: 'hid',
store: client
}));
}).catch((err) => {
debug('koa-redis error: ' + err);
reject(err);
});
});
const wrapped = new Promise((resolve, reject) => {
return connection.then((client) => {
client = coRedis(client);
client.on('error', (err) => {
debug('Client error: ' + err);
reject(err);
});
client.on('ready', () => {
debug('Successfully connected to Redis');
resolve(client);
});
}).catch((err) => {
debug('co-redis error: ' + err);
reject(err);
});
});
export function sessionStore() {
return function* (next) {
const sess = yield redisSession;
yield sess.bind(this)(next);
}
}
export function middleware() {
return function* (next) {
this.redis = yield wrapped;
yield next;
}
}