feat(路由): 添加路由加载器和配置实现自动化路由注册
重构服务器路由注册逻辑,将手动路由注册替换为基于配置的自动加载 新增路由加载器工具和路由配置文件,支持动态加载和错误处理
This commit is contained in:
@@ -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;
|
||||||
+2
-54
@@ -224,6 +224,7 @@ async function initializeApp() {
|
|||||||
const swaggerUi = require('swagger-ui-express');
|
const swaggerUi = require('swagger-ui-express');
|
||||||
const { specs, customCSS } = require('./swagger');
|
const { specs, customCSS } = require('./swagger');
|
||||||
const { authMiddleware } = require('./middleware/auth');
|
const { authMiddleware } = require('./middleware/auth');
|
||||||
|
const loadRoutes = require('./utils/routeLoader');
|
||||||
|
|
||||||
initializeApp();
|
initializeApp();
|
||||||
|
|
||||||
@@ -249,60 +250,7 @@ app.use('/api', (req, res, next) => {
|
|||||||
return authMiddleware(req, res, next);
|
return authMiddleware(req, res, next);
|
||||||
});
|
});
|
||||||
|
|
||||||
const deviceRoutes = require('./routes/devices');
|
loadRoutes(app);
|
||||||
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);
|
|
||||||
|
|
||||||
app.use('/uploads', express.static('uploads'));
|
app.use('/uploads', express.static('uploads'));
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
Reference in New Issue
Block a user