UNPKG

express-mongo-boilerplate-generator

Version:

A production-ready boilerplate generator for Express.js and MongoDB with service layer architecture and Joi validation

64 lines (51 loc) 1.65 kB
const express = require('express'); require('express-async-errors'); const cors = require('cors'); const helmet = require('helmet'); const compression = require('compression'); const morgan = require('morgan'); const rateLimit = require('express-rate-limit'); // Import routes const authRoutes = require('./routes/auth.route'); const userRoutes = require('./routes/user.route'); // Import middleware const errorHandler = require('./middleware/errorHandler'); const notFound = require('./middleware/notFound'); const app = express(); // Security middleware app.use(helmet()); app.use(cors()); // Rate limiting const limiter = rateLimit({ windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS) || 900000, max: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS) || 100, message: 'Too many requests from this IP, please try again later.' }); app.use('/api', limiter); // Body parser middleware app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); // Compression middleware app.use(compression()); // Logging middleware if (process.env.NODE_ENV === 'development') { app.use(morgan('dev')); } // Health check endpoint app.get('/health', (req, res) => { res.status(200).json({ status: 'OK', timestamp: new Date().toISOString(), uptime: process.uptime(), environment: process.env.NODE_ENV }); }); // API routes const apiPrefix = process.env.API_PREFIX || '/api/v1'; app.use(`${apiPrefix}/auth`, authRoutes); app.use(`${apiPrefix}/users`, userRoutes); // 404 handler app.use(notFound); // Global error handler (must be last) app.use(errorHandler); module.exports = app;