Files
games-express-api/app.js
T
john-okeefe 38e6d21585 feat(health): add unauthenticated GET /health endpoint
Returns 200 { status: 'ok' } for container healthchecks and
monitoring. Placed before all /api/* routes so it bypasses
auth; intentionally static with no DB dependency so the
container reports healthy whenever the process is serving.
2026-09-05 20:36:57 -04:00

60 lines
1.5 KiB
JavaScript

import 'dotenv/config'
import 'colors'
import express from 'express'
import cors from 'cors'
import helmet from 'helmet'
import cookieParser from 'cookie-parser'
import mongoSanitize from 'express-mongo-sanitize'
import xss from 'xss-clean'
import rateLimit from 'express-rate-limit'
import hpp from 'hpp'
import morgan from 'morgan'
import errorHandler from './middleware/error.js'
import games from './routes/games.js'
import adminGames from './routes/adminGames.js'
import tags from './routes/tags.js'
import auth from './routes/auth.js'
import users from './routes/users.js'
import createAdmin from './scripts/adminUser.js'
import connectDB from './config/db.js'
connectDB().then(x => x)
const app = express()
const whitelist = ['http://localhost:3000', 'http://localhost:5173','https://games.linuxhg.com', 'http://localhost:8000']
const corsOptions = {
origin: (origin, callback) => {
if (whitelist.indexOf(origin) !== -1 || !origin) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
},
}
const limiter = rateLimit({
windowMs: 10 * 60 * 1000, // 10 minutes
max: 100
})
app.use(express.json(), cookieParser(), morgan('dev'), mongoSanitize(), helmet(), xss(), limiter, hpp(), cors())
app.get('/health', (req, res) => res.status(200).json({ status: 'ok' }))
app.use('/api/admin/games', adminGames)
app.use('/api/games', games)
app.use('/api/tags', tags)
app.use('/api/auth', auth)
app.use('/api/admin/users', users)
app.use(errorHandler)
createAdmin()
export default app