43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const helmet = require('helmet');
|
|
const rateLimit = require('express-rate-limit');
|
|
const swaggerUi = require('swagger-ui-express');
|
|
const swaggerDocument = require('./docs/swagger.json');
|
|
const routes = require('./routes');
|
|
const errorHandler = require('./middleware/errorHandler');
|
|
const logger = require('./utils/logger');
|
|
const morganMiddleware = require('./middleware/morganMiddleware');
|
|
|
|
const app = express();
|
|
|
|
app.use(helmet());
|
|
app.use(cors({
|
|
origin: process.env.ALLOWED_ORIGINS.split(','),
|
|
credentials: true
|
|
}));
|
|
|
|
const limiter = rateLimit({
|
|
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS),
|
|
max: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS)
|
|
});
|
|
|
|
app.use(limiter);
|
|
app.use(express.json({ limit: '10mb' }));
|
|
app.use(express.urlencoded({ extended: true }));
|
|
app.use(morganMiddleware);
|
|
|
|
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
|
|
app.use('/api/v1', routes);
|
|
|
|
app.get('/health', (req, res) => {
|
|
res.json({
|
|
status: 'healthy',
|
|
timestamp: new Date().toISOString(),
|
|
environment: process.env.NODE_ENV
|
|
});
|
|
});
|
|
|
|
app.use(errorHandler);
|
|
|
|
module.exports = app; |