myex-cli
Version:
Opinionated Express.js framework with CLI tools
53 lines (43 loc) • 1.55 kB
JavaScript
import express from 'express';
import 'dotenv/config';
import swaggerUi from 'swagger-ui-express';
import { connectToDatabase } from './db/connection.js';
import { configureMiddleware } from './middlewares/index.js';
import { configureSecurity } from './security/index.js';
import { configureRoutes } from './routes/index.js';
import { configureErrorHandlers } from './middlewares/errorHandlers.js';
import { logger } from './utils/logger.js';
import swaggerSpec from './config/swagger.js';
// Initialize Express app
const app = express();
const PORT = process.env.PORT || 3000;
// Connect to MongoDB
connectToDatabase();
// Configure security middleware
configureSecurity(app);
// Configure regular middleware
configureMiddleware(app);
// Setup Swagger UI
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec, {
explorer: true,
customCss: '.swagger-ui .topbar { display: none }',
customSiteTitle: "MYX API Documentation",
}));
// Expose swagger.json
app.get('/swagger.json', (req, res) => {
res.setHeader('Content-Type', 'application/json');
res.send(swaggerSpec);
});
// Register routes
configureRoutes(app);
// Configure error handlers (should be last)
configureErrorHandlers(app);
// Start the server only if we're not in test mode
if (process.env.NODE_ENV !== 'test') {
app.listen(PORT, () => {
logger.info(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`);
logger.info(`API Documentation available at http://localhost:${PORT}/api-docs`);
});
}
// For testing purposes
export default app;