UNPKG

ajinkya-mhetre-mern

Version:

A MERN starter with frontend and backend folders

85 lines (71 loc) 2.17 kB
// ===== src/app.js ===== const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const rateLimit = require('express-rate-limit'); const path = require('path'); // Import routes const authRoutes = require('./routes/auth'); const adminRoutes = require('./routes/admin'); const farmerRoutes = require('./routes/farmer'); const customerRoutes = require('./routes/customer'); const app = express(); // Security middleware app.use(helmet()); app.use(cors({ origin: process.env.CLIENT_URL || "http://localhost:3000", credentials: true })); // Rate limiting const limiter = rateLimit({ windowMs: 5 * 60 * 1000, // 5 minutes max: 10000 // limit each IP to 10000 requests per windowMs }); app.use('/api/', limiter); // Body parsing middleware app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); // Static files app.use('/uploads', express.static(path.join(__dirname, '../uploads'))); // API routes app.use('/api/auth', authRoutes); app.use('/api/admin', adminRoutes); app.use('/api/farmer', farmerRoutes); app.use('/api/customer', customerRoutes); // Health check endpoint app.get('/api/health', (req, res) => { res.json({ status: 'OK', timestamp: new Date().toISOString(), uptime: process.uptime() }); }); // 404 handler app.use('*', (req, res) => { res.status(404).json({ message: 'Route not found' }); }); // Global error handler app.use((error, req, res, next) => { console.error('Error:', error); if (error.name === 'ValidationError') { const errors = Object.values(error.errors).map(err => err.message); return res.status(400).json({ message: 'Validation Error', errors }); } if (error.code === 11000) { const field = Object.keys(error.keyValue)[0]; return res.status(400).json({ message: `${field} already exists` }); } res.status(500).json({ message: process.env.NODE_ENV === 'production' ? 'Internal server error' : error.message }); }); module.exports = app;