const express = require('express'); const cors = require('cors'); const path = require('path'); const dotenv = require('dotenv'); dotenv.config(); const app = express(); const PORT = process.env.PORT || 3002; // 中间件 const corsOptions = { origin: process.env.CORS_ORIGIN ? process.env.CORS_ORIGIN.split(',') : ['http://localhost:5173', 'http://localhost:3001'], credentials: true, methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'] }; app.use(cors(corsOptions)); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // 静态文件服务 - 前端应用 app.use(express.static(path.join(__dirname, '../frontend/dist'))); // 加载路由模块 app.use('/api/auth', require('./routes/auth')); app.use('/api/users', require('./routes/users')); app.use('/api/products', require('./routes/products')); app.use('/api/customers', require('./routes/customers')); app.use('/api/suppliers', require('./routes/suppliers')); app.use('/api/subcontractors', require('./routes/subcontractors')); app.use('/api/projects', require('./routes/projects')); app.use('/api/upload', require('./routes/upload')); app.use('/api/construction', require('./routes/construction')); app.use('/api/categories', require('./routes/categories')); app.use('/api/payment-nodes', require('./routes/paymentNodes')); app.use('/api/payment-records', require('./routes/paymentRecords')); app.use('/api/exchange-rates', require('./routes/exchange')); app.use('/api/advances', require('./routes/advances')); app.use('/api/payment-requests', require('./routes/payments')); app.use('/api/verifications', require('./routes/verifications')); app.use('/api/executions', require('./routes/executions')); app.use('/api/reimbursements', require('./routes/reimbursements')); app.use('/api/purchase-requests', require('./routes/purchase')); app.use('/api/purchase-orders', require('./routes/purchase-orders')); app.use('/api/payment-plans', require('./routes/payment-plans')); app.use('/api/inventory', require('./routes/inventory')); app.use('/api/logistics-companies', require('./routes/logistics-companies')); app.use('/api/logistics', require('./routes/logistics')); app.use('/api/finance-stats', require('./routes/finance-stats')); app.use('/api/budget', require('./routes/budget')); app.use('/api/health', require('./routes/health')); // 404处理 app.use((req, res) => { res.status(404).json({ success: false, message: 'API端点不存在', requested: req.originalUrl }); }); // 错误处理中间件 app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ success: false, message: '服务器内部错误', error: process.env.NODE_ENV === 'development' ? err.message : undefined }); }); // 启动服务器 app.listen(PORT, () => { console.log(` 🚀 公司财务管理系统 - 模块化后端 =========================================== 📍 服务器地址: http://0.0.0.0:${PORT} 🌐 外部访问: http://${process.env.EXTERNAL_IP || 'localhost'}:${PORT} 🔗 核心API端点: - 健康检查: /api/health - 客户管理: /api/customers - 供应商管理: /api/suppliers - 项目管理: /api/projects - 商品管理: /api/products - 采购申请: /api/purchase-requests - 库存管理: /api/inventory - 付款节点: /api/payment-nodes - 付款记录: /api/payment-records - 汇率管理: /api/exchange-rates - 预支款管理: /api/advances - 报销管理: /api/reimbursements - 财务统计: /api/finance-stats 👤 测试账号: - 用户名: admin - 密码: X123c321@ ✅ 所有API已就绪 ✅ 前端应用已集成 ✅ 数据库已连接 ✅ 等待用户访问 ⏰ 启动时间: ${new Date().toISOString()} =========================================== `); }).on('error', (err) => { console.error('服务器启动失败:', err); process.exit(1); });