"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.server = exports.app = void 0; const express_1 = __importDefault(require("express")); const cors_1 = __importDefault(require("cors")); const helmet_1 = __importDefault(require("helmet")); const dotenv_1 = __importDefault(require("dotenv")); const http_1 = require("http"); const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const database_1 = require("./config/database"); const routes_1 = __importDefault(require("./routes")); const errorHandler_1 = require("./middleware/errorHandler"); const websocketService_1 = __importStar(require("./services/websocketService")); const firmware_1 = require("./models/firmware"); const ota_1 = require("./models/ota"); const mqttBrokerService_1 = require("./services/mqttBrokerService"); const loggerService_1 = require("./services/loggerService"); const requestLogger_1 = require("./middleware/requestLogger"); dotenv_1.default.config({ override: false }); const envPath = path_1.default.resolve(process.cwd(), '.env.production').trim(); console.log('加载生产环境文件:', envPath); dotenv_1.default.config({ path: envPath, override: true }); process.env.NODE_ENV = process.env.NODE_ENV || 'production'; const app = (0, express_1.default)(); exports.app = app; const server = (0, http_1.createServer)(app); exports.server = server; app.use((0, helmet_1.default)()); app.use((0, cors_1.default)({ origin: true, credentials: true, methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'], allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With', 'X-Forwarded-For', 'X-Real-IP'] })); app.use(express_1.default.json()); app.use(express_1.default.urlencoded({ extended: true })); app.use(requestLogger_1.requestLogger); app.use('/api', routes_1.default); const frontendPath = path_1.default.join(__dirname, '../../dist'); if (fs_1.default.existsSync(frontendPath)) { app.use(express_1.default.static(frontendPath)); app.get('*', (req, res) => { res.sendFile(path_1.default.join(frontendPath, 'index.html')); }); console.log('前端静态文件服务已启用'); } app.get('/health', (req, res) => { res.status(200).json({ status: 'ok', message: 'MQTT Dashboard API is running', timestamp: new Date().toISOString() }); }); app.use(errorHandler_1.errorHandler); const PORT = parseInt(process.env.PORT || '3002'); async function startServer() { try { await loggerService_1.LoggerService.info('MQTT Dashboard API服务器开始启动', { source: 'system', module: 'init', details: JSON.stringify({ port: PORT, environment: process.env.NODE_ENV }) }); await (0, database_1.testConnection)(); console.log('数据库连接成功'); await loggerService_1.LoggerService.info('数据库连接成功', { source: 'system', module: 'database' }); await firmware_1.FirmwareFileModel.createTable(); console.log('固件文件表创建成功'); await ota_1.OTATaskModel.createTable(); console.log('OTA任务表创建成功'); const webSocketService = new websocketService_1.default(server); (0, websocketService_1.setWebSocketService)(webSocketService); console.log('WebSocket服务已初始化'); webSocketService.startRealDataUpdates(); console.log('实时数据更新服务已启动'); const mqttBroker = mqttBrokerService_1.MqttBrokerService.getInstance(); await mqttBroker.start(); console.log('MQTT Broker服务已启动'); await loggerService_1.LoggerService.info('MQTT Broker服务已启动', { source: 'system', module: 'mqtt_broker', details: JSON.stringify({ port: process.env.MQTT_BROKER_PORT || 1883 }) }); server.listen(PORT, '0.0.0.0', () => { console.log(`服务器运行在端口 ${PORT}`); console.log(`API文档地址: http://localhost:${PORT}/api`); console.log(`WebSocket服务地址: ws://localhost:${PORT}`); console.log(`MQTT Broker地址: mqtt://localhost:${process.env.MQTT_BROKER_PORT || 1883}`); loggerService_1.LoggerService.info('服务器启动成功', { source: 'system', module: 'http', details: JSON.stringify({ port: PORT, apiUrl: `http://localhost:${PORT}/api`, wsUrl: `ws://localhost:${PORT}`, mqttBroker: `mqtt://localhost:${process.env.MQTT_BROKER_PORT || 1883}` }) }).catch(() => { }); }); } catch (error) { console.error('启动服务器失败:', error); await loggerService_1.LoggerService.error('启动服务器失败', { source: 'system', module: 'init', details: JSON.stringify({ error: error instanceof Error ? error.message : '未知错误' }) }); process.exit(1); } } process.on('SIGINT', async () => { console.log('正在关闭服务器...'); const mqttBroker = mqttBrokerService_1.MqttBrokerService.getInstance(); await mqttBroker.stop(); process.exit(0); }); process.on('SIGTERM', async () => { console.log('正在关闭服务器...'); const mqttBroker = mqttBrokerService_1.MqttBrokerService.getInstance(); await mqttBroker.stop(); process.exit(0); }); startServer(); //# sourceMappingURL=index.js.map