Files
Web_BLV_OA_Exam_Prod/api/app.ts

68 lines
1.2 KiB
TypeScript

/**
* This is a API server
*/
import express, {
type Request,
type Response,
type NextFunction,
} from 'express'
import cors from 'cors'
import path from 'path'
import dotenv from 'dotenv'
import { fileURLToPath } from 'url'
import authRoutes from './routes/auth.js'
// for esm mode
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
// load env
dotenv.config()
const app: express.Application = express()
app.use(cors())
app.use(express.json({ limit: '10mb' }))
app.use(express.urlencoded({ extended: true, limit: '10mb' }))
/**
* API Routes
*/
app.use('/api/auth', authRoutes)
/**
* health
*/
app.use(
'/api/health',
(req: Request, res: Response, next: NextFunction): void => {
res.status(200).json({
success: true,
message: 'ok',
})
},
)
/**
* error handler middleware
*/
app.use((error: Error, req: Request, res: Response, next: NextFunction) => {
res.status(500).json({
success: false,
error: 'Server internal error',
})
})
/**
* 404 handler
*/
app.use((req: Request, res: Response) => {
res.status(404).json({
success: false,
error: 'API not found',
})
})
export default app