const express = require('express'); const mongoose = require('mongoose'); const cors = require('cors'); const path = require('path'); const os = require('os'); require('dotenv').config(); const app = express(); // Load models first const User = require('./models/User'); const Item = require('./models/Item'); const Reservation = require('./models/Reservation'); // Middleware app.use(cors()); app.use(express.json()); app.use(express.static('public')); // Connect to MongoDB mongoose.connect(process.env.MONGODB_URI) .then(async () => { console.log('Database connected and models initialized successfully'); }) .catch(err => { console.error('MongoDB connection error:', err); // Don't exit, just log the error }); // Routes app.use('/api/auth', require('./routes/auth')); app.use('/api/items', require('./routes/items')); app.use('/api/reservations', require('./routes/reservations')); app.use('/api/upload', require('./routes/upload')); // Error handling middleware app.use((err, req, res, next) => { console.error('Error:', err); res.status(500).json({ message: 'Internal server error', error: process.env.NODE_ENV === 'development' ? err.message : undefined }); }); // Serve static files app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); const PORT = process.env.PORT || 3000; // Get local IP addresses function getLocalIPs() { const interfaces = os.networkInterfaces(); const addresses = []; for (const interfaceName in interfaces) { const interface = interfaces[interfaceName]; for (const address of interface) { // Skip internal and non-IPv4 addresses if (address.family === 'IPv4' && !address.internal) { addresses.push(address.address); } } } return addresses; } // Handle uncaught exceptions process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); }); // Handle unhandled promise rejections process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); }); app.listen(PORT, () => { const localIPs = getLocalIPs(); console.log(`Server is running on:`); console.log(`- Local: http://localhost:${PORT}`); localIPs.forEach(ip => { console.log(`- Network: http://${ip}:${PORT}`); }); });