// 导入必要的模块 const express = require('express'); const cors = require('cors'); const dotenv = require('dotenv'); const path = require('path'); // 导入数据库配置 const { testConnection } = require('./config/database'); // 导入中间件 const { notFound, errorHandler } = require('./middleware/errorHandler'); // 导入响应工具 const { success } = require('./utils/response'); // 加载环境变量 dotenv.config(); // 创建Express应用 const app = express(); // ======================================== // 中间件配置 // ======================================== // CORS跨域配置(允许前端访问) app.use(cors()); // 解析JSON格式的请求体 app.use(express.json()); // 解析URL编码的请求体 app.use(express.urlencoded({ extended: true })); // 静态文件服务(用于访问上传的图片等) app.use('/uploads', express.static(path.join(__dirname, 'uploads'))); // 请求日志中间件(开发环境) if (process.env.NODE_ENV === 'development') { app.use((req, res, next) => { console.log(`📨 ${req.method} ${req.path}`); next(); }); } // ======================================== // 路由配置 // ======================================== // 根路由 - API欢迎信息 app.get('/', (req, res) => { res.json(success({ name: '智能餐饮管理系统API', version: '1.0.0', description: '提供完整的餐厅管理功能', status: 'running', endpoints: { auth: '/api/auth - 用户认证', dishes: '/api/dishes - 菜品管理', menus: '/api/menus - 菜单管理', orders: '/api/orders - 订单管理', inventory: '/api/inventory - 库存管理', reservations: '/api/reservations - 预订管理', members: '/api/members - 会员管理', payments: '/api/payments - 支付结算', analytics: '/api/analytics - 数据分析' } }, '欢迎使用智能餐饮管理系统')); }); // 健康检查路由 app.get('/health', (req, res) => { res.json(success({ status: 'OK', timestamp: new Date(), uptime: process.uptime(), // 服务器运行时间(秒) environment: process.env.NODE_ENV || 'development' })); }); // API路由前缀 const API_PREFIX = '/api'; // 导入路由 const authRoutes = require('./routes/authRoutes'); const dishRoutes = require('./routes/dishRoutes'); const menuRoutes = require('./routes/menuRoutes'); const orderRoutes = require('./routes/orderRoutes'); const inventoryRoutes = require('./routes/inventoryRoutes'); const reservationRoutes = require('./routes/reservationRoutes'); const memberRoutes = require('./routes/memberRoutes'); const paymentRoutes = require('./routes/paymentRoutes'); const analyticsRoutes = require('./routes/analyticsRoutes'); // 注册路由 app.use(`${API_PREFIX}/auth`, authRoutes); app.use(`${API_PREFIX}/dishes`, dishRoutes); app.use(`${API_PREFIX}/menus`, menuRoutes); app.use(`${API_PREFIX}/orders`, orderRoutes); app.use(`${API_PREFIX}/inventory`, inventoryRoutes); app.use(`${API_PREFIX}/reservations`, reservationRoutes); app.use(`${API_PREFIX}/members`, memberRoutes); app.use(`${API_PREFIX}/payments`, paymentRoutes); app.use(`${API_PREFIX}/analytics`, analyticsRoutes); // TODO: 后续将在这里引入其他功能模块的路由 // 例如: // app.use(`${API_PREFIX}/orders`, orderRoutes); // app.use(`${API_PREFIX}/reservations`, reservationRoutes); // ======================================== // 错误处理 // ======================================== // 404错误处理(放在所有路由之后) app.use(notFound); // 全局错误处理中间件(必须放在最后) app.use(errorHandler); // ======================================== // 启动服务器 // ======================================== const PORT = process.env.PORT || 5000; // 异步启动函数 const startServer = async () => { try { // 测试数据库连接 console.log('🔍 正在测试数据库连接...'); const dbConnected = await testConnection(); if (!dbConnected) { console.error('❌ 数据库连接失败,服务器启动中止'); console.error('💡 请检查:'); console.error(' 1. MySQL是否已启动'); console.error(' 2. .env文件中的数据库配置是否正确'); console.error(' 3. 数据库restaurant_db是否已创建'); process.exit(1); // 退出程序 } // 启动HTTP服务器 app.listen(PORT, () => { console.log('╔══════════════════════════════════════════╗'); console.log('║ 智能餐饮管理系统 - 后端服务器已启动 ║'); console.log('╚══════════════════════════════════════════╝'); console.log(`🚀 服务器地址: http://localhost:${PORT}`); console.log(`📝 环境模式: ${process.env.NODE_ENV || 'development'}`); console.log(`💾 数据库: ${process.env.DB_NAME}`); console.log(''); console.log('📡 可用的API端点:'); console.log(` GET / - API欢迎页面`); console.log(` GET /health - 健康检查`); console.log(''); console.log('⌨️ 按 Ctrl+C 停止服务器'); console.log('════════════════════════════════════════════'); }); } catch (error) { console.error('❌ 服务器启动失败:', error.message); process.exit(1); } }; // 优雅关闭 process.on('SIGTERM', () => { console.log('\n👋 收到SIGTERM信号,正在关闭服务器...'); process.exit(0); }); process.on('SIGINT', () => { console.log('\n👋 收到SIGINT信号,正在关闭服务器...'); process.exit(0); }); // 启动服务器 startServer(); // 导出app供测试使用 module.exports = app;