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_NAME = your_database_name
DB_HOST = 127.0.0.1 DB_HOST = 127.0.0.1
DB_PORT = your_database_port 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) => { const logout = async (req, res) => {
try { try {
const delSession = req.session.destroy((error) => { const delSession = req.session.destroy((error) => {
if (error) { if(Object.keys(error).length) {
res.status(500).send({ message: "Internal Server Error" }); res.status(500).send({ message: "Internal Server Error" });
logger.error("Error while logging out", { error }); logger.error("Error while logging out", { error });
return; return;

View File

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

View File

@ -16,10 +16,10 @@ const isAuthenticated = (req, res, next) => {
}; };
next(); next();
} else { } else {
const delSession = req.session.destroy((err) => { const delSession = req.session.destroy((error) => {
if (err) { if (Object.keys(error).length) {
res.status(500).send({ message: "Internal Server Error" }); res.status(500).send({ message: "Internal Server Error" });
logger.error("session.destroy", { err }); logger.error("session.destroy", { error });
return; return;
} else { } else {
res.clearCookie(sessionName); 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": { "dependencies": {
"axios": "^1.7.9", "axios": "^1.7.9",
"axios-rate-limit": "^1.4.0", "axios-rate-limit": "^1.4.0",
"connect-sqlite3": "^0.9.15", "connect-redis": "^8.0.1",
"cookie-parser": "^1.4.7", "cookie-parser": "^1.4.7",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv-flow": "^4.1.0", "dotenv-flow": "^4.1.0",
@ -31,6 +31,7 @@
"express-validator": "^7.2.0", "express-validator": "^7.2.0",
"helmet": "^8.0.0", "helmet": "^8.0.0",
"pg": "^8.13.1", "pg": "^8.13.1",
"redis": "^4.7.0",
"sequelize": "^6.37.5", "sequelize": "^6.37.5",
"serializr": "^3.0.3", "serializr": "^3.0.3",
"winston": "^3.17.0" "winston": "^3.17.0"