diff --git a/src/config/db/index.js b/src/config/db/index.js index dcc1d1b..eb84f30 100644 --- a/src/config/db/index.js +++ b/src/config/db/index.js @@ -4,7 +4,7 @@ import logger from "../logger/index.js" const { MONGODB_URI } = Config -const connectDB = async () => { +export const connectDB = async () => { try { const connectionInstance = await mongoose.connect(MONGODB_URI) logger.info( @@ -16,4 +16,11 @@ const connectDB = async () => { } } -export default connectDB +export const releaseConnection = async () => { + try { + await mongoose.connection.close(); + logger.info('☘️ Release MongoDB Connection Successfully!') + } catch (error) { + logger.error("Release MongoDB connection error: ", error.message) + } +} diff --git a/src/server.js b/src/server.js index 40d85d8..907e918 100644 --- a/src/server.js +++ b/src/server.js @@ -1,7 +1,7 @@ import app from "./app.js" import Config from "./config/index.js" import logger from "./config/logger/index.js" -import connectDB from "./config/db/index.js" +import { connectDB, releaseConnection } from "./config/db/index.js" const { PORT } = Config @@ -23,6 +23,25 @@ async function startServer () { } setTimeout(() => process.exit(1), 1000) }) + + /********************************************************************************** + * Gracefully Shutdown Handling + **********************************************************************************/ + process.on('SIGTERM', () => { + logger.info('SIGTERM signal received: closing HTTP server') + server.close(() => { + logger.log('HTTP server closed') + }) + releaseConnection() + }); + + process.on('SIGINT', () => { + logger.log('SIGINT signal received: closing HTTP server') + server.close(() => { + logger.log('HTTP server closed') + }) + releaseConnection() + }); } catch (err) { if (err instanceof Error) { logger.error(err.message)