require("dotenv").config({quiet:true}); //DB Setup const sqlite3 = require('sqlite3').verbose(); const dbFile = process.env.DB_FILE || 'database.db'; global.db = new sqlite3.Database(dbFile, (err) => { if (err) { console.error('Could not connect to database', err); process.exit(1); // We simply CANNOT continue without a database } else { console.log('Connected to database'); require("./migrations.js")(global.db); } }); //Express Setup const express = require('express'); const app = express(); const port = process.env.SERVER_PORT || 3000; app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(express.static('public')); //Debugger app.use((req, res, next) => { if (process.env.DEBUG !== 'true') { return next(); } console.log(`${req.method} ${req.url}`); console.log('Body:', req.body); console.log('Query:', req.query); console.log('Params:', req.params); console.log('Headers:', req.headers); console.log('---'); next(); }) // Load routes from routes/* recursively const fs = require('fs'); const path = require('path'); function loadRoutes(dir) { fs.readdirSync(dir).forEach(file => { const fullPath = path.join(dir, file); const stat = fs.statSync(fullPath); if (stat.isDirectory()) { loadRoutes(fullPath); } else if (stat.isFile() && file.endsWith('.js')) { const route = require(fullPath); // Derive the route path from the file path const routePath = '/' + path.relative(path.join(__dirname, 'routes'), fullPath) .replace(/\\/g, '/') // Windows compatibility .replace('.js', '') .replace(/index$/,''); app.use(routePath, route); console.log(`Loaded route: ${routePath} from ${fullPath}`); } }); } loadRoutes(path.join(__dirname, 'routes')); app.listen(port, () => { console.log(`Listening on ${port}`); });