var appEnv = process.env.APP_ENV; if (appEnv == undefined) { appEnv = 'development'; } require('dotenv').config({ path: `config/env/.env.${appEnv}` }); const { promisify } = require('util'), chalk = require('chalk'), morgan = require('morgan'); const DateUtilities = require('./src/utils/dateUtilities'), exceptionHandler = require('./src/middlewares/exceptions.handler'), connectDb = require('./src/database/connectDb'), config = require('./src/config'), createApp = require('./src/createApp'); const app = createApp(); // Morgan status code color config morgan.token('statusColor', (req, res) => { const status = (typeof res.headersSent !== 'boolean' ? Boolean(res.header) : res.headersSent) ? res.statusCode : undefined; return status >= 500 ? chalk.red(status) : status >= 429 ? chalk.magenta(status) : status >= 400 ? chalk.yellow(status) : status >= 300 ? chalk.cyan(status) : status >= 200 ? chalk.green(status) : chalk.underline(status); }); app.use(morgan('[:date[iso]] ":method :url HTTP/:http-version" :statusColor :res[content-length] ":referrer" ":user-agent" :remote-addr')); require('./src/database/models/mongo'); config.initAuth(); const setupRoutes = (app) => { app.use(require('./src/routes')); app.use(exceptionHandler.notFoundErrorHandler); app.use(exceptionHandler.logErrorHandler); app.use(exceptionHandler.fianlErrorHandler); }; const startServer = async () => { try { await connectDb.connectAllDb(); console.log(`${DateUtilities.getDateTimeISOString()}`, chalk.green('All database connections established, relationships loaded')); setupRoutes(app); const port = process.env.SERVER_PORT || 3200; await promisify(app.listen).bind(app)(port); console.log(`${DateUtilities.getDateTimeISOString()}`, chalk.green(`${appEnv} API server listening on port ${port}`)); } catch (error) { console.error(`${DateUtilities.getDateTimeISOString()}`, chalk.red('Failed to start server:'), error); process.exit(1); } }; startServer();