Skip to content

Commit 39379d0

Browse files
committed
feat(backend): enhance server shutdown process and Redis error handling
- Add 'init' flag to backend service in docker-compose for initialization. - Modify start-dev.sh to use 'exec' for better process management. - Set 'trust proxy' in app configuration for improved request handling. - Update graceful shutdown to log connection closures for Prisma, Redis, and IORedis. - Change signal handling to 'once' for shutdown events in app and worker. - Improve Redis error logging by removing unnecessary object wrapping.
1 parent 7c34d12 commit 39379d0

5 files changed

Lines changed: 13 additions & 8 deletions

File tree

apps/backend/src/app.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ app.use(requestLogger);
4141
app.use(cookieParser());
4242
app.use(express.json());
4343
app.use(express.urlencoded({ extended: true }));
44+
app.set("trust proxy", 1);
4445

4546
app.use("/api/vocab", vocabularyModule.router);
4647
app.use("/api/story", storyModule.router);
@@ -64,9 +65,12 @@ const startServer = async () => {
6465

6566
const gracefulShutdown = async (signal: string) => {
6667
logger.info(`Received ${signal}. Stopping server...`);
67-
prisma.$disconnect();
68+
await prisma.$disconnect();
69+
logger.info("Closed prisma connection");
6870
await closeRedisConnection();
71+
logger.info("Closed Redis connection");
6972
await closeIORedisConnection();
73+
logger.info("Closed IORedis connection");
7074
server.close((err) => {
7175
if (err) {
7276
logger.error("Error closing server:", err);
@@ -83,14 +87,14 @@ const startServer = async () => {
8387
};
8488

8589
["SIGINT", "SIGTERM"].forEach((sig) => {
86-
process.on(sig, () => gracefulShutdown(sig));
90+
process.once(sig, () => gracefulShutdown(sig));
8791
});
8892

89-
process.on("uncaughtException", (err) => {
93+
process.once("uncaughtException", (err) => {
9094
logger.error("Uncaught exception:", err);
9195
gracefulShutdown("uncaughtException");
9296
});
93-
process.on("unhandledRejection", (reason) => {
97+
process.once("unhandledRejection", (reason) => {
9498
logger.error("Unhandled rejection:", reason);
9599
gracefulShutdown("unhandledRejection");
96100
});

apps/backend/src/services/redis/redisClient.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const connectRedis = async () => {
2121
try {
2222
await redisClient.connect();
2323
} catch (error) {
24-
logger.error("Failed to connect to Redis", { error });
24+
logger.error("Failed to connect to Redis", error);
2525
throw new RedisError("Failed to connect to Redis", error);
2626
}
2727
};
@@ -30,7 +30,7 @@ const closeRedisConnection = async () => {
3030
try {
3131
await redisClient.quit();
3232
} catch (error) {
33-
logger.error("Failed to close redisClient", { error });
33+
logger.error("Failed to close redisClient", error);
3434
throw new RedisError("Failed to close redisClient", error);
3535
}
3636
};

apps/backend/src/worker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ const shutdown = async () => {
3939
process.exit(0);
4040
};
4141

42-
["SIGINT", "SIGTERM"].forEach((sig) => process.on(sig, shutdown));
42+
["SIGINT", "SIGTERM"].forEach((sig) => process.once(sig, shutdown));
4343

4444
startWorker();

apps/backend/start-dev.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ echo 'Waiting for DB to be ready...' &&
33
npx prisma migrate deploy &&
44
echo 'Migration complete, seeding data...' &&
55
node ./prisma/seed-word-ranking.js
6-
npm run dev
6+
exec npm run dev

docker-compose-dev.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ services:
2020
build:
2121
context: ./apps/lemmas
2222
backend:
23+
init: true
2324
build:
2425
context: ./apps/backend
2526
dockerfile: Dockerfile.dev

0 commit comments

Comments
 (0)