68 lines
1.2 KiB
TypeScript
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
|