swaf/src/components/RedisComponent.ts

40 lines
1.3 KiB
TypeScript

import ApplicationComponent from "../ApplicationComponent";
import {Express, Router} from "express";
import redis, {RedisClient} from "redis";
import config from "config";
import Logger from "../Logger";
import session, {Store} from "express-session";
import connect_redis from "connect-redis";
const RedisStore = connect_redis(session);
export default class RedisComponent extends ApplicationComponent<void> {
private redisClient?: RedisClient;
private store?: Store;
public async start(app: Express, router: Router): Promise<void> {
this.redisClient = redis.createClient(config.get('redis.port'), config.get('redis.host'), {});
this.redisClient.on('error', (err: any) => {
Logger.error(err, 'An error occurred with redis.');
});
this.store = new RedisStore({
client: this.redisClient,
prefix: 'wms-sess:',
});
}
public async stop(): Promise<void> {
if (this.redisClient) {
await this.close('Redis connection', this.redisClient, this.redisClient.quit);
}
}
public getStore(): Store {
if (!this.store) throw `Redis store was not initialized.`;
return this.store;
}
public canServe(): boolean {
return this.redisClient !== undefined && this.redisClient.connected;
}
}