55 lines
1.6 KiB
JavaScript
55 lines
1.6 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({
|
|
crossOriginResourcePolicy: { policy: 'cross-origin' },
|
|
}));
|
|
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', {
|
|
setHeaders: (res) => {
|
|
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
}
|
|
}));
|
|
registerRoutes(app);
|
|
|
|
// Global Error Handler
|
|
app.use(errorMiddleware);
|
|
|
|
export default app;
|