60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
import { createClient } from "redis";
|
|
import localStorage from "local-storage";
|
|
import config from "../config/index.js";
|
|
import { logger } from "./index.js";
|
|
import Promise from "promise";
|
|
|
|
const store = await createStore();
|
|
|
|
async function createStore() {
|
|
if (config.store.provider === "redis") {
|
|
return {
|
|
client: await createRedisClient(),
|
|
|
|
set: async function (key, value) {
|
|
return this.client.hSet(key, value);
|
|
},
|
|
get: async function (key) {
|
|
return this.client.hGetAll(key);
|
|
},
|
|
};
|
|
} else {
|
|
return {
|
|
set: function (key, value) {
|
|
return new Promise(function (resolve, reject) {
|
|
if (localStorage(key, value)) resolve(true);
|
|
else reject(Error("unable to set using local-storage"));
|
|
});
|
|
},
|
|
get: function (key) {
|
|
return new Promise(function (resolve) {
|
|
resolve(localStorage(key));
|
|
});
|
|
},
|
|
};
|
|
}
|
|
}
|
|
|
|
async function createRedisClient() {
|
|
const client = createClient({
|
|
url: config.store.url,
|
|
});
|
|
|
|
client.on("error", (err) => {
|
|
if (err.errors) {
|
|
err.errors.forEach((error) => {
|
|
logger.error(`Redis Client Error ${error}`);
|
|
});
|
|
} else {
|
|
logger.error(`Redis Client Error ${err.message}`);
|
|
}
|
|
});
|
|
|
|
await client.connect();
|
|
logger.info(`Connect store to ${config.redis.url}`);
|
|
|
|
return client;
|
|
}
|
|
|
|
export default store;
|