mirror of
https://github.com/Alvin-Zilverstand/Challenge_15_Magazijn_App_Maken.git
synced 2026-03-06 02:56:41 +01:00
init
This commit is contained in:
86
server.js
Normal file
86
server.js
Normal file
@@ -0,0 +1,86 @@
|
||||
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}`);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user