51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import 'dotenv/config';
|
|
import express from 'express';
|
|
import cors from 'cors';
|
|
import path from 'path';
|
|
import { connectDB } from './db';
|
|
import { errorHandler } from './middleware/errorHandler';
|
|
import authRoutes from './routes/auth';
|
|
import boardRoutes from './routes/board';
|
|
import eventRoutes from './routes/events';
|
|
import galleryRoutes from './routes/gallery';
|
|
import sponsorRoutes from './routes/sponsors';
|
|
import minuteRoutes from './routes/minutes';
|
|
import memberRoutes from './routes/members';
|
|
import emailRoutes from './routes/email';
|
|
|
|
const app = express();
|
|
const port = process.env.PORT ?? 801;
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// Serve uploaded files
|
|
app.use('/uploads', express.static(path.join(__dirname, '../../uploads')));
|
|
|
|
// API routes
|
|
app.use('/api/auth', authRoutes);
|
|
app.use('/api/board', boardRoutes);
|
|
app.use('/api/events', eventRoutes);
|
|
app.use('/api/gallery', galleryRoutes);
|
|
app.use('/api/sponsors', sponsorRoutes);
|
|
app.use('/api/minutes', minuteRoutes);
|
|
app.use('/api/members', memberRoutes);
|
|
app.use('/api', emailRoutes);
|
|
|
|
// Serve built React app
|
|
const clientBuild = path.join(__dirname, '../../client/build');
|
|
app.use(express.static(clientBuild));
|
|
app.use((_req, res) => {
|
|
res.sendFile(path.join(clientBuild, 'index.html'));
|
|
});
|
|
|
|
app.use(errorHandler);
|
|
|
|
connectDB()
|
|
.then(() => {
|
|
app.listen(port, () => console.log(`Server running on port ${port}`));
|
|
})
|
|
.catch((err) => {
|
|
console.error('Failed to connect to MongoDB:', err);
|
|
process.exit(1);
|
|
});
|