Initial commit

This commit is contained in:
2024-12-11 21:09:37 +00:00
commit 89ba53d5e4
15 changed files with 1088 additions and 0 deletions

21
router/apiRoute.js Normal file
View File

@ -0,0 +1,21 @@
'use strict'
// Dependencies
const express = require('express')
const { logMessage } = require('../lib/logger')
// Routes
const router = express.Router()
// Base route (allow testing if API is running)
router.get('/', async (req, res, next) => {
logMessage(req.baseUrl, 'API is running')
res.status(200).json({ result: 'OK' })
})
// Example route
router.use('/example', require('./example'))
// TODO: Add routes here
module.exports = router

14
router/example.js Normal file
View File

@ -0,0 +1,14 @@
'use strict'
// Dependencies
const express = require('express')
// Routes
const router = express.Router()
// Example route GET /api/example
router.get('/', async (req, res, next) => {
res.status(200).json({ result: 'Example route OK' })
})
module.exports = router

65
router/index.js Normal file
View File

@ -0,0 +1,65 @@
'use strict'
// Dependencies
const express = require('express')
const { logMessage, errorMessage } = require('../lib/logger')
const logRoute = require('../middleware/logRoute')
const testValidUser = require('../middleware/testValidUser')
// Server state
let server
let serverStarted = false
let serverClosing = false
// Setup error handling
const unhandledError = (err) => {
// Log the errors
errorMessage('router', err)
// Only clean up once
if (serverClosing) {
return
}
serverClosing = true
// If server has started, close it down
if (serverStarted) {
server.close(() => {
process.exit(1)
})
}
}
process.on('uncaughtException', unhandledError)
process.on('unhandledRejection', unhandledError)
const app = express()
// Middlewares
app.use(express.json())
app.use(express.static('public'))
app.use(express.urlencoded({ extended: true }))
// API Routes
app.use('/api', logRoute, testValidUser, require('./apiRoute'))
// Add non API routes here if needed
// Common error handlers
app.use((req, res, next) => {
logMessage('router', `Route not found: ${req.url}`)
return res.status(404).json({ error: `Route not found: ${req.url}` })
})
app.use((err, req, res, next) => {
if (err.status >= 500) {
errorMessage('router', err)
}
res.status(err.status || 500).json({
error: err.message
})
})
// Start API server
server = app.listen(process.env.PORT || 3000, () => {
serverStarted = true
const addr = server.address()
logMessage('router', `API started at port ${addr.port}`)
})