XNSim/XNSimPortal/server.js

124 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const os = require('os');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const session = require('express-session');
// 导入自定义模块
const { performCleanup } = require('./utils/xnCoreService');
const authRoutes = require('./routes/auth');
const versionRoutes = require('./routes/versions');
const filesystemRoutes = require('./routes/filesystem');
const systemInfoRoutes = require('./routes/system-info');
const serviceDevRoutes = require('./routes/service-dev');
const modelDevRoutes = require('./routes/model-dev');
const simulationRoutes = require('./routes/run-simulation');
const udpMonitorRoutes = require('./routes/udp-monitor');
const planesRoutes = require('./routes/planes');
const configurationsRoutes = require('./routes/configurations');
const interfaceRoutes = require('./routes/interface-config');
const icdImportRoutes = require('./routes/icd-import');
const qaRoutes = require('./routes/qa');
const todoRoutes = require('./routes/todos');
const systemLogRoutes = require('./routes/system-log');
const ddsMonitorRoutes = require('./routes/DDSMonitor');
const systemMonitorRoutes = require('./routes/SystemMonitor');
const modelMonitorRoutes = require('./routes/ModelMonitor');
const systemControlRoutes = require('./routes/SystemControl');
const dataMonitorRoutes = require('./routes/DataMonitor');
const dataCollectRoutes = require('./routes/DataCollect');
const interfaceGenRoutes = require('./routes/InterfaceGen');
const app = express();
const PORT = process.env.PORT || 3000;
// 获取XNCore环境变量
const xnCorePath = process.env.XNCore || '';
if (!xnCorePath) {
console.error('警告: 环境变量XNCore未设置可能无法找到登录动态库');
}
// 中间件
app.use(cors({
origin: true, // 允许所有来源
credentials: true // 允许跨域请求携带cookie
}));
app.use(cookieParser());
app.use(session({
secret: 'xnsim-secret-key', // 用于签名 session ID cookie 的密钥
resave: false, // 不强制保存 session
saveUninitialized: false, // 不强制将未初始化的 session 存储
rolling: true, // 每次请求时重置 cookie 的过期时间
cookie: {
httpOnly: true, // 防止客户端 JavaScript 访问 cookie
secure: process.env.NODE_ENV === 'production', // 在生产环境使用 HTTPS
sameSite: 'strict', // 防止 CSRF 攻击
maxAge: 30 * 60 * 1000 // cookie 有效期 30 分钟
}
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// 静态文件服务 - 放在根路径处理之前
app.use(express.static(__dirname));
// 根路径直接返回main.html
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'main.html'));
});
// 监听进程退出事件
process.on('exit', performCleanup);
process.on('SIGINT', () => {
console.log('收到 SIGINT 信号');
performCleanup();
process.exit(0);
});
process.on('SIGTERM', () => {
console.log('收到 SIGTERM 信号');
performCleanup();
process.exit(0);
});
// 处理未捕获的异常
process.on('uncaughtException', (error) => {
console.error('未捕获的异常:', error);
performCleanup();
process.exit(1);
});
// 路由
app.use('/api', authRoutes);
app.use('/api', versionRoutes);
app.use('/api/filesystem', filesystemRoutes);
app.use('/api', systemInfoRoutes);
app.use('/api/service-dev', serviceDevRoutes);
app.use('/api', modelDevRoutes);
app.use('/api', simulationRoutes);
app.use('/api/udp-monitor', udpMonitorRoutes);
app.use('/api', planesRoutes);
app.use('/api', configurationsRoutes);
app.use('/api/interface', interfaceRoutes);
app.use('/api/icd', icdImportRoutes);
app.use('/api/qa', qaRoutes);
app.use('/api/todos', todoRoutes);
app.use('/api/system-log', systemLogRoutes);
app.use('/api/dds-monitor', ddsMonitorRoutes);
app.use('/api/system-monitor', systemMonitorRoutes);
app.use('/api/model-monitor', modelMonitorRoutes);
app.use('/api/system-control', systemControlRoutes);
app.use('/api/data-monitor', dataMonitorRoutes);
app.use('/api/data-collect', dataCollectRoutes);
app.use('/api/interface-gen', interfaceGenRoutes);
// 接口配置页面路由
app.get('/interface-config', (req, res) => {
res.sendFile(path.join(__dirname, 'interface-config.html'));
});
// 启动服务器
app.listen(PORT, () => {
console.log(`服务器运行在 http://localhost:${PORT}`);
});