#!/usr/bin/env node /** * 爱鉴花后端服务主入口文件 * 基于Express.js的RESTful API服务 */ const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const compression = require('compression'); const morgan = require('morgan'); const path = require('path'); require('dotenv').config(); // Swagger配置 const { specs, swaggerUi } = require('./config/swagger'); // 导入路由模块 const authRoutes = require('./routes/auth'); const userRoutes = require('./routes/users'); const productRoutes = require('./routes/products'); const orderRoutes = require('./routes/orders'); const identificationRoutes = require('./routes/identifications'); const adminRoutes = require('./routes/admin'); // 导入中间件 const { errorHandler } = require('./middlewares/errorHandler'); const { authMiddleware } = require('./middlewares/auth'); const app = express(); const PORT = process.env.PORT || 3201; // 安全中间件 app.use(helmet()); app.use(compression()); // CORS配置 app.use(cors({ origin: process.env.NODE_ENV === 'production' ? ['https://your-domain.com'] : ['http://localhost:9000', 'http://127.0.0.1:9000'], credentials: true })); // 日志中间件 app.use(morgan(process.env.NODE_ENV === 'production' ? 'combined' : 'dev')); // 解析请求体 app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); // 静态文件服务 app.use('/uploads', express.static(path.join(__dirname, 'uploads'))); // 健康检查接口 app.get('/health', (req, res) => { res.json({ status: 'OK', timestamp: new Date().toISOString(), uptime: process.uptime(), environment: process.env.NODE_ENV || 'development' }); }); // API文档 app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs, { explorer: true, customCss: '.swagger-ui .topbar { display: none }', customSiteTitle: '爱鉴花API文档' })); // API路由配置 app.use('/api/v1/auth', authRoutes); app.use('/api/v1/users', authMiddleware, userRoutes); app.use('/api/v1/products', productRoutes); app.use('/api/v1/orders', authMiddleware, orderRoutes); app.use('/api/v1/identifications', authMiddleware, identificationRoutes); app.use('/api/v1/admin', authMiddleware, adminRoutes); // 404处理 app.use('*', (req, res) => { res.status(404).json({ code: 404, message: '接口不存在', data: null, timestamp: Date.now() }); }); // 全局错误处理 app.use(errorHandler); // 启动服务 app.listen(PORT, () => { console.log(`🚀 爱鉴花后端服务已启动`); console.log(`📍 环境: ${process.env.NODE_ENV || 'development'}`); console.log(`🌐 地址: http://localhost:${PORT}`); console.log(`📚 API文档: http://localhost:${PORT}/api-docs`); console.log(`❤️ 健康检查: http://localhost:${PORT}/health`); console.log('─'.repeat(50)); }); // 优雅关闭 process.on('SIGINT', () => { console.log('\n🛑 正在关闭服务...'); process.exit(0); }); module.exports = app;