diff --git a/backend/config/routes.js b/backend/config/routes.js new file mode 100644 index 0000000..4941aea --- /dev/null +++ b/backend/config/routes.js @@ -0,0 +1,110 @@ +const path = require('path'); + +const routesConfig = [ + { + file: 'consumableImport.js', + path: '/api', + }, + { + file: 'devices.js', + path: '/api/devices', + }, + { + file: 'racks.js', + path: '/api/racks', + }, + { + file: 'rooms.js', + path: '/api/rooms', + }, + { + file: 'deviceFields.js', + path: '/api/deviceFields', + }, + { + file: 'background.js', + path: '/api/background', + }, + { + file: 'consumables.js', + path: '/api/consumables', + }, + { + file: 'consumableRecords.js', + path: '/api/consumable-records', + }, + { + file: 'consumableCategories.js', + path: '/api/consumable-categories', + }, + { + file: 'auth.js', + path: '/api/auth', + }, + { + file: 'users.js', + path: '/api/users', + }, + { + file: 'roles.js', + path: '/api/roles', + }, + { + file: 'tickets.js', + path: '/api/tickets', + }, + { + file: 'ticketCategories.js', + path: '/api/ticket-categories', + }, + { + file: 'ticketFields.js', + path: '/api/ticket-fields', + }, + { + file: 'systemSettings.js', + path: '/api/system-settings', + }, + { + file: 'cables.js', + path: '/api/cables', + }, + { + file: 'devicePorts.js', + path: '/api/device-ports', + }, + { + file: 'networkCards.js', + path: '/api/network-cards', + }, + { + file: 'inventory.js', + path: '/api/inventory', + }, + { + file: 'backup.js', + path: '/api/backup', + }, + { + file: 'statistics.js', + path: '/api/statistics', + }, + { + file: 'operationLogs.js', + path: '/api/operation-logs', + }, + { + file: 'idleDevices.js', + path: '/api/idle-devices', + }, + { + file: 'warehouses.js', + path: '/api/warehouses', + }, + { + file: 'dangerousOperations.js', + path: '/api/dangerous-operations', + }, +]; + +module.exports = routesConfig; diff --git a/backend/server.js b/backend/server.js index e3c3155..6c61965 100644 --- a/backend/server.js +++ b/backend/server.js @@ -224,6 +224,7 @@ async function initializeApp() { const swaggerUi = require('swagger-ui-express'); const { specs, customCSS } = require('./swagger'); const { authMiddleware } = require('./middleware/auth'); +const loadRoutes = require('./utils/routeLoader'); initializeApp(); @@ -249,60 +250,7 @@ app.use('/api', (req, res, next) => { return authMiddleware(req, res, next); }); -const deviceRoutes = require('./routes/devices'); -const rackRoutes = require('./routes/racks'); -const roomRoutes = require('./routes/rooms'); -const deviceFieldRoutes = require('./routes/deviceFields'); -const backgroundRoutes = require('./routes/background'); -const consumableRoutes = require('./routes/consumables'); -const consumableRecordRoutes = require('./routes/consumableRecords'); -const consumableCategoryRoutes = require('./routes/consumableCategories'); -const authRoutes = require('./routes/auth'); -const usersRoutes = require('./routes/users'); -const rolesRoutes = require('./routes/roles'); -const ticketRoutes = require('./routes/tickets'); -const ticketCategoryRoutes = require('./routes/ticketCategories'); -const ticketFieldRoutes = require('./routes/ticketFields'); -const systemSettingsRoutes = require('./routes/systemSettings'); -const cableRoutes = require('./routes/cables'); -const devicePortRoutes = require('./routes/devicePorts'); -const networkCardRoutes = require('./routes/networkCards'); -const inventoryRoutes = require('./routes/inventory'); -const backupRoutes = require('./routes/backup'); -const statisticsRoutes = require('./routes/statistics'); -const operationLogsRoutes = require('./routes/operationLogs'); -const idleDeviceRoutes = require('./routes/idleDevices'); -const warehouseRoutes = require('./routes/warehouses'); -const dangerousOperationsRoutes = require('./routes/dangerousOperations'); -const consumableImportRoutes = require('./routes/consumableImport'); - -app.use('/api', consumableImportRoutes); - -app.use('/api/devices', deviceRoutes); -app.use('/api/racks', rackRoutes); -app.use('/api/rooms', roomRoutes); -app.use('/api/deviceFields', deviceFieldRoutes); -app.use('/api/background', backgroundRoutes); -app.use('/api/consumables', consumableRoutes); -app.use('/api/consumable-records', consumableRecordRoutes); -app.use('/api/consumable-categories', consumableCategoryRoutes); -app.use('/api/auth', authRoutes); -app.use('/api/users', usersRoutes); -app.use('/api/roles', rolesRoutes); -app.use('/api/tickets', ticketRoutes); -app.use('/api/ticket-categories', ticketCategoryRoutes); -app.use('/api/ticket-fields', ticketFieldRoutes); -app.use('/api/system-settings', systemSettingsRoutes); -app.use('/api/cables', cableRoutes); -app.use('/api/device-ports', devicePortRoutes); -app.use('/api/network-cards', networkCardRoutes); -app.use('/api/inventory', inventoryRoutes); -app.use('/api/backup', backupRoutes); -app.use('/api/statistics', statisticsRoutes); -app.use('/api/operation-logs', operationLogsRoutes); -app.use('/api/idle-devices', idleDeviceRoutes); -app.use('/api/warehouses', warehouseRoutes); -app.use('/api/dangerous-operations', dangerousOperationsRoutes); +loadRoutes(app); app.use('/uploads', express.static('uploads')); diff --git a/backend/utils/routeLoader.js b/backend/utils/routeLoader.js new file mode 100644 index 0000000..cf219f0 --- /dev/null +++ b/backend/utils/routeLoader.js @@ -0,0 +1,25 @@ +const path = require('path'); +const routesConfig = require('../config/routes'); + +function loadRoutes(app) { + const routesDir = path.join(__dirname, '../routes'); + + routesConfig.forEach((routeConfig) => { + try { + const routerPath = path.join(routesDir, routeConfig.file); + const router = require(routerPath); + + if (typeof router === 'function') { + app.use(routeConfig.path, router); + console.log(`路由已加载: ${routeConfig.path} -> ${routeConfig.file}`); + } else { + console.warn(`警告: ${routeConfig.file} 没有导出有效的 Express 路由器`); + } + } catch (error) { + console.error(`加载路由失败: ${routeConfig.file}`, error.message); + throw error; + } + }); +} + +module.exports = loadRoutes;