back to redis (gotta cache API calls)

This commit is contained in:
Kaushik Narayan R 2025-03-05 00:16:01 -07:00
parent ba8982086b
commit 5a8611afbc
6 changed files with 224 additions and 1540 deletions

View File

@ -6,3 +6,5 @@ DB_PASSWD = your_database_password
DB_NAME = your_database_name
DB_HOST = 127.0.0.1
DB_PORT = your_database_port
REDIS_HOST = 127.0.0.1
REDIS_PORT = 6379

View File

@ -142,7 +142,7 @@ const refresh = async (req, res) => {
const logout = async (req, res) => {
try {
const delSession = req.session.destroy((error) => {
if (error) {
if(Object.keys(error).length) {
res.status(500).send({ message: "Internal Server Error" });
logger.error("Error while logging out", { error });
return;

View File

@ -7,7 +7,9 @@ const session = require("express-session");
const cors = require("cors");
const cookieParser = require("cookie-parser");
const helmet = require("helmet");
const SQLiteStore = require("connect-sqlite3")(session);
const { createClient } = require('redis');
const { RedisStore } = require("connect-redis");
const { sessionName } = require("./constants");
const db = require("./models");
@ -22,16 +24,29 @@ const app = express();
// Enable this if you run behind a proxy (e.g. nginx)
app.set("trust proxy", process.env.TRUST_PROXY);
// Configure SQLite store file
const sqliteStore = new SQLiteStore({
table: "session_store",
db: "spotify-manager.db"
// Configure Redis client and connect
const redisClient = createClient({
socket: {
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
}
});
redisClient.connect()
.then(() => {
logger.info("Connected to Redis store");
})
.catch((error) => {
logger.error("Redis connection error", { error });
cleanupFunc();
});
const redisStore = new RedisStore({ client: redisClient });
// Configure session middleware
app.use(session({
name: sessionName,
store: sqliteStore,
store: redisStore,
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
@ -103,6 +118,7 @@ const cleanupFunc = (signal) => {
logger.debug(`${signal} signal received, shutting down now...`);
Promise.allSettled([
redisClient.disconnect,
db.sequelize.close(),
util.promisify(server.close),
]).then(() => {

View File

@ -16,10 +16,10 @@ const isAuthenticated = (req, res, next) => {
};
next();
} else {
const delSession = req.session.destroy((err) => {
if (err) {
const delSession = req.session.destroy((error) => {
if (Object.keys(error).length) {
res.status(500).send({ message: "Internal Server Error" });
logger.error("session.destroy", { err });
logger.error("session.destroy", { error });
return;
} else {
res.clearCookie(sessionName);

1723
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,7 @@
"dependencies": {
"axios": "^1.7.9",
"axios-rate-limit": "^1.4.0",
"connect-sqlite3": "^0.9.15",
"connect-redis": "^8.0.1",
"cookie-parser": "^1.4.7",
"cors": "^2.8.5",
"dotenv-flow": "^4.1.0",
@ -31,6 +31,7 @@
"express-validator": "^7.2.0",
"helmet": "^8.0.0",
"pg": "^8.13.1",
"redis": "^4.7.0",
"sequelize": "^6.37.5",
"serializr": "^3.0.3",
"winston": "^3.17.0"