ininventer/backend/server.js

91 lines
2.4 KiB
JavaScript

const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const morgan = require('morgan');
const dotenv = require('dotenv');
const rateLimit = require('express-rate-limit');
const path = require('path');
// Load environment variables
dotenv.config();
// Import routes
const authRoutes = require('./routes/auth');
const userRoutes = require('./routes/users');
const companyRoutes = require('./routes/companies');
const productRoutes = require('./routes/products');
// Import seed functions
const seedSuperAdmin = require('./utils/seedSuperAdmin');
const seedTestData = require('./utils/seedTestData');
// Initialize Express app
const app = express();
// Trust proxy for requests coming through Nginx
app.set('trust proxy', true);
// Configure rate limiting based on environment
const limiter = rateLimit({
windowMs: 1 * 60 * 1000, // 1 minute in development, 15 minutes in production
max: process.env.NODE_ENV === 'development' ? 1000 : 100, // Higher limit in development
message: 'Too many requests, please try again later',
standardHeaders: true,
legacyHeaders: false,
// Trust the X-Forwarded-For header from our reverse proxy
trustProxy: true
});
// Apply rate limiting to all requests except in development mode
if (process.env.NODE_ENV !== 'development') {
app.use(limiter);
}
// Middleware
app.use(cors());
app.use(express.json());
app.use(morgan('dev'));
// Database connection
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(async () => {
console.log('MongoDB connected');
// Seed superadmin user
await seedSuperAdmin();
// Seed test data
await seedTestData();
})
.catch(err => console.error('MongoDB connection error:', err));
// Routes
app.use('/api/auth', authRoutes);
app.use('/api/users', userRoutes);
app.use('/api/companies', companyRoutes);
app.use('/api/products', productRoutes);
// Health check endpoint
app.get('/health', (req, res) => {
res.status(200).json({ status: 'ok' });
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
success: false,
message: 'Server error',
error: process.env.NODE_ENV === 'development' ? err.message : {}
});
});
// Start server
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
module.exports = app;