Roblox-Analytics/index.js

66 lines
1.8 KiB
JavaScript

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}`);
});