Files
productcatalogue_backend/app.js
T

48 lines
1.4 KiB
JavaScript

import express from 'express';
import helmet from 'helmet';
import cors from 'cors';
import compression from 'compression';
import cookieParser from 'cookie-parser';
import morgan from 'morgan';
import swaggerUi from 'swagger-ui-express';
import swaggerSpec from './src/shared/config/swagger.config.js';
import { errorMiddleware } from './src/shared/middleware/error.middleware.js';
import registerRoutes from './src/features/index.js';
import { buildContext } from './src/shared/middleware/context.middleware.js';
const app = express();
// Middlewares
app.use(helmet());
app.use(cors({
origin: process.env.CORS_ORIGIN || '*',
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
allowedHeaders: ['Content-Type', 'Authorization', 'Accept', 'X-Requested-With']
}));
app.use(compression());
app.use(cookieParser());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(buildContext);
if (process.env.NODE_ENV !== 'test') {
app.use(morgan('dev'));
}
// Swagger setup
app.use('/api/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
// Base Health Check
app.get('/health', (req, res) => {
res.status(200).json({ status: 'OK', timestamp: new Date() });
});
// Centralized Feature Router Loader
app.use('/uploads', express.static('uploads'));
registerRoutes(app);
// Global Error Handler
app.use(errorMiddleware);
export default app;