Cong123779's picture
feat: add favicon, OG image, dual DB adapter (Supabase+SQLite), api utility
7c46a3a verified
Raw
History Blame Contribute Delete
2.27 kB
import express from 'express';
import cors from 'cors';
import morgan from 'morgan';
import dotenv from 'dotenv';
import path from 'path';
import { fileURLToPath } from 'url';
import projectRoutes from './routes/projectRoutes.js';
import messageRoutes from './routes/messageRoutes.js';
import { login } from './controllers/authController.js';
import { getDb } from './config/db.js';
// Load environment variables
dotenv.config();
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const app = express();
const PORT = process.env.PORT || 5000;
// Middleware
app.use(cors({
origin: '*', // Adjust this for production security as needed
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type', 'Authorization']
}));
app.use(express.json());
app.use(morgan('dev'));
// Test route
app.get('/api/health', (req, res) => {
res.status(200).json({ status: 'UP', message: 'Lyvuha.com portfolio backend is active' });
});
// API Routes
app.post('/api/auth/login', login);
app.use('/api/projects', projectRoutes);
app.use('/api/messages', messageRoutes);
// Database initialization
getDb()
.then(() => {
console.log('SQLite database initialized successfully.');
})
.catch((err) => {
console.error('Failed to initialize SQLite database:', err);
});
// Serve frontend — Docker puts dist at /app/frontend/dist, local dev at ../../frontend/dist
const frontendDistPath = process.env.NODE_ENV === 'production'
? path.resolve(__dirname, '../frontend/dist')
: path.resolve(__dirname, '../../frontend/dist');
app.use(express.static(frontendDistPath));
// Fallback all non-API routes to index.html (SPA routing)
app.get('*', (req, res) => {
if (req.originalUrl.startsWith('/api')) {
return res.status(404).json({ success: false, message: 'API Route not found' });
}
res.sendFile(path.join(frontendDistPath, 'index.html'));
});
// Global Error Handler
app.use((err, req, res, next) => {
console.error('Unhandled error:', err);
res.status(500).json({
success: false,
message: 'An unexpected server error occurred'
});
});
app.listen(PORT, () => {
console.log(`Backend server running on http://localhost:${PORT} in ${process.env.NODE_ENV || 'development'} mode`);
});