90 lines
2.2 KiB
JavaScript
90 lines
2.2 KiB
JavaScript
const path = require('path');
|
|
const express = require('express');
|
|
const dotenv = require('dotenv');
|
|
const cors = require('cors');
|
|
const morgan = require('morgan');
|
|
const fs = require('fs');
|
|
const { connectDB, sequelize } = require('./config/db');
|
|
|
|
// Load env variables
|
|
dotenv.config();
|
|
|
|
// Import route files
|
|
const userRoutes = require('./routes/userRoutes');
|
|
const gymClassRoutes = require('./routes/gymClassRoutes');
|
|
const bookingRoutes = require('./routes/bookingRoutes');
|
|
const uploadRoutes = require('./routes/uploadRoutes');
|
|
const authRoutes = require('./routes/authRoutes');
|
|
|
|
// Initialize express app
|
|
const app = express();
|
|
|
|
// Middleware
|
|
app.use(express.json());
|
|
app.use(cors());
|
|
|
|
// Dev logging middleware
|
|
if (process.env.NODE_ENV === 'development') {
|
|
app.use(morgan('dev'));
|
|
}
|
|
|
|
// Create uploads directory if it doesn't exist
|
|
const uploadsDir = path.join(__dirname, 'uploads');
|
|
if (!fs.existsSync(uploadsDir)) {
|
|
fs.mkdirSync(uploadsDir, { recursive: true });
|
|
}
|
|
|
|
// Set static folder for uploads
|
|
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
|
|
|
|
// Mount routers
|
|
app.use('/api/users', userRoutes);
|
|
app.use('/api/classes', gymClassRoutes);
|
|
app.use('/api/bookings', bookingRoutes);
|
|
app.use('/api/upload', uploadRoutes);
|
|
app.use('/api/auth', authRoutes);
|
|
|
|
// Root route
|
|
app.get('/', (req, res) => {
|
|
res.json({ message: 'Welcome to Gym API' });
|
|
});
|
|
|
|
// Error handling middleware
|
|
app.use((err, req, res, next) => {
|
|
console.error(err.stack);
|
|
res.status(500).json({
|
|
message: 'Server Error',
|
|
error: err.message
|
|
});
|
|
});
|
|
|
|
// Define port
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
// Connect to database and start server
|
|
const startServer = async () => {
|
|
try {
|
|
// Connect to database
|
|
await connectDB();
|
|
|
|
await sequelize.sync();
|
|
console.log('Database synchronized');
|
|
|
|
// Start server
|
|
app.listen(PORT, () => {
|
|
console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`);
|
|
});
|
|
} catch (error) {
|
|
console.error('Unable to start server:', error);
|
|
process.exit(1);
|
|
}
|
|
};
|
|
|
|
startServer();
|
|
|
|
// Handle unhandled promise rejections
|
|
process.on('unhandledRejection', (err) => {
|
|
console.log(`Error: ${err.message}`);
|
|
// Close server & exit process
|
|
process.exit(1);
|
|
}); |