Files

58 lines
1.6 KiB
JavaScript

require('dotenv').config({ path: './config/.env' })
const express = require('express')
const databaseConnection = require('./setup/databaseConnection.js')
const routerEndpoints = require('./setup/routerEndpoints.js')
const globalErrorHandler = require('./globalErrorHandler/globalErrorHandler.js')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')
const compression = require('compression')
const cors = require('cors')
const app = express()
const allowedOrigins = ['http://localhost:3000', 'http://localhost:5173', 'https://bm-vue.chbk.app', 'https://mbmanager.ir']
app.use(
cors({
origin: allowedOrigins,
credentials: true,
optionsSuccessStatus: 200, // For legacy browser support
})
)
app.use(compression())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.text())
app.use(cookieParser())
app.use(express.json())
app.set('view engine', 'ejs')
app.use(express.static('views/public'))
// Health check endpoint
app.get(['/health', '/healthz', '/api/health'], (req, res) => {
const mongoose = require('mongoose')
const isDbConnected = mongoose.connection.readyState === 1
res.status(isDbConnected ? 200 : 503).json({
status: isDbConnected ? 'healthy' : 'unhealthy',
uptime: process.uptime(),
timestamp: new Date().toISOString(),
service: 'belonging-manager-api',
database: isDbConnected ? 'connected' : 'disconnected',
})
})
app.use('/api', routerEndpoints)
const { registerEventHandlers } = require('./events/index')
registerEventHandlers()
databaseConnection(app)
app.use(globalErrorHandler)
module.exports = app