Files
2025-10-21 20:54:03 +02:00

86 lines
2.4 KiB
JavaScript

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}`);
});
});