sushil-gitmate
Version:
Professional Git workflow automation powered by AI. Streamline your development process with natural language commands and intelligent automation.
65 lines (56 loc) • 1.79 kB
JavaScript
import express from 'express';
import dotenv from 'dotenv';
import logger from './utils/logger.js';
import authRoutes from '../auth/authRoutes.js';
// import apiRoutes from '../routes/apiRoutes.js'; // To be created
dotenv.config();
const app = express();
const PORT = process.env.PORT || 3000;
// Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Morgan-like logging using Winston
app.use((req, res, next) => {
logger.http(`Request: ${req.method} ${req.originalUrl}`, {
ip: req.ip,
userAgent: req.get('User-Agent'),
});
res.on('finish', () => {
logger.http(`Response: ${res.statusCode} ${res.statusMessage}; ${res.get('Content-Length') || 0}b sent`, {
method: req.method,
url: req.originalUrl,
status: res.statusCode,
});
});
next();
});
// Routes
app.use('/auth', authRoutes); // Mount authentication routes
// app.use('/api', apiRoutes); // Mount API routes
app.get('/', (req, res) => {
res.send('GitBot server is running. Welcome!');
});
// Basic Error Handling Middleware
// eslint-disable-next-line no-unused-vars
app.use((err, req, res, next) => {
logger.error('Unhandled error:', {
message: err.message,
stack: err.stack,
url: req.originalUrl,
method: req.method,
});
res.status(err.status || 500).json({
error: {
message: err.message || 'Internal Server Error',
status: err.status || 500,
},
});
});
// Start the server
if (process.env.NODE_ENV !== 'test') {
app.listen(PORT, () => {
logger.info(`Server is running on http://localhost:${PORT}`, { service: 'Server' });
logger.info(`Environment: ${process.env.NODE_ENV || 'development'}`, { service: 'Server' });
});
}
export default app; // Export for testing or programmatic use