Spaces:
Sleeping
Sleeping
| require('dotenv').config(); | |
| const express = require('express'); | |
| const cors = require('cors'); | |
| const cookieParser = require('cookie-parser'); | |
| const morgan = require('morgan'); | |
| const helmet = require('helmet'); | |
| const rateLimit = require('express-rate-limit'); | |
| const path = require('path'); | |
| const connectDB = require('./config/db'); | |
| const errorHandler = require('./middleware/errorHandler'); | |
| const app = express(); | |
| // βββ Security βββ | |
| app.use(helmet()); | |
| // βββ Rate limiting βββ | |
| const limiter = rateLimit({ | |
| windowMs: 15 * 60 * 1000, | |
| max: 200, | |
| message: { message: 'Too many requests, please try again later.' }, | |
| }); | |
| app.use('/api/', limiter); | |
| // βββ CORS βββ | |
| app.use( | |
| cors({ | |
| origin: process.env.ADMIN_URL || 'http://localhost:3000', | |
| credentials: true, | |
| }) | |
| ); | |
| // βββ Body Parsing βββ | |
| app.use(express.json({ limit: '10mb' })); | |
| app.use(express.urlencoded({ extended: true })); | |
| app.use(cookieParser()); | |
| // βββ Logging βββ | |
| if (process.env.NODE_ENV === 'development') { | |
| app.use(morgan('dev')); | |
| } | |
| // βββ Static uploads βββ | |
| app.use('/uploads', express.static(path.join(__dirname, '../uploads'))); | |
| // βββ Routes βββ | |
| app.use('/api/auth', require('./routes/auth.routes')); | |
| app.use('/api/markets', require('./routes/market.routes')); | |
| app.use('/api/banners', require('./routes/banner.routes')); | |
| app.use('/api/blog', require('./routes/blog.routes')); | |
| app.use('/api/colours', require('./routes/colour.routes')); | |
| app.use('/api/pages', require('./routes/cms.routes')); | |
| app.use('/api/inspiration', require('./routes/inspiration.routes')); | |
| app.use('/api/dealers', require('./routes/dealer.routes')); | |
| app.use('/api/partners', require('./routes/partner.routes')); | |
| app.use('/api/admin-users', require('./routes/admin-user.routes')); | |
| app.use('/api/alerts', require('./routes/alert.routes')); | |
| // Health check | |
| app.get('/api/health', (req, res) => { | |
| res.json({ status: 'ok', timestamp: new Date().toISOString() }); | |
| }); | |
| app.get('/', (req, res) => { | |
| res.json({ status: 'ok', timestamp: new Date().toISOString() }); | |
| }); | |
| // βββ Error Handler βββ | |
| app.use(errorHandler); | |
| // βββ Start Server βββ | |
| const PORT = process.env.PORT || 5000; | |
| const startServer = async () => { | |
| await connectDB(); | |
| app.listen(PORT, () => { | |
| console.log(`\nπ Harris Paints API running on http://localhost:${PORT}`); | |
| console.log(` Environment: ${process.env.NODE_ENV || 'development'}\n`); | |
| }); | |
| }; | |
| startServer(); | |
| module.exports = app; | |