First commit
This commit is contained in:
83
server/server.js
Normal file
83
server/server.js
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* Datacenter Designer Server
|
||||
* Express application with modular routes
|
||||
*/
|
||||
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
const config = require('./config');
|
||||
const db = require('./db');
|
||||
const { errorHandler, notFoundHandler } = require('./lib/errorHandler');
|
||||
|
||||
// Import route modules
|
||||
const projectsRouter = require('./routes/projects');
|
||||
const racksRouter = require('./routes/racks');
|
||||
const devicesRouter = require('./routes/devices');
|
||||
const connectionsRouter = require('./routes/connections');
|
||||
|
||||
// Initialize Express app
|
||||
const app = express();
|
||||
|
||||
// Middleware
|
||||
app.use(express.json({ limit: config.api.jsonLimit }));
|
||||
app.use(express.static(path.join(__dirname, '../public')));
|
||||
|
||||
// Optional: Request logging (development)
|
||||
if (config.logging.enabled && config.server.env === 'development') {
|
||||
app.use((req, res, next) => {
|
||||
console.log(`${req.method} ${req.path}`);
|
||||
next();
|
||||
});
|
||||
}
|
||||
|
||||
// API Routes
|
||||
app.use('/api/projects', projectsRouter);
|
||||
app.use('/api/racks', racksRouter);
|
||||
app.use('/api/devices', devicesRouter);
|
||||
app.use('/api/device-types', devicesRouter); // Mounted under /devices/types
|
||||
app.use('/api/connections', connectionsRouter);
|
||||
|
||||
// Health check endpoint
|
||||
app.get('/api/health', (req, res) => {
|
||||
const stats = db.getStats();
|
||||
res.json({
|
||||
status: 'ok',
|
||||
version: '1.0.0',
|
||||
database: stats
|
||||
});
|
||||
});
|
||||
|
||||
// 404 handler - must be after all other routes
|
||||
app.use(notFoundHandler);
|
||||
|
||||
// Error handler - must be last
|
||||
app.use(errorHandler);
|
||||
|
||||
// Initialize database and start server
|
||||
db.init();
|
||||
|
||||
app.listen(config.server.port, () => {
|
||||
console.log(`
|
||||
╔═══════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ Datacenter Designer Server ║
|
||||
║ ║
|
||||
║ Running on: http://${config.server.host}:${config.server.port} ║
|
||||
║ Environment: ${config.server.env} ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════════════════════╝
|
||||
`);
|
||||
});
|
||||
|
||||
// Graceful shutdown
|
||||
process.on('SIGTERM', () => {
|
||||
console.log('SIGTERM signal received: closing HTTP server');
|
||||
db.close();
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
process.on('SIGINT', () => {
|
||||
console.log('SIGINT signal received: closing HTTP server');
|
||||
db.close();
|
||||
process.exit(0);
|
||||
});
|
||||
Reference in New Issue
Block a user