Spaces:
Sleeping
Sleeping
| const express = require('express'); | |
| const dotenv = require('dotenv'); | |
| const cors = require('cors'); | |
| const morgan = require('morgan'); | |
| const { connectDB } = require('./config/db'); | |
| const { errorHandler } = require('./middleware/errorHandler'); | |
| const routes = require('./routes'); | |
| const logger = require('./utils/logger'); | |
| // 加载环境变量 | |
| dotenv.config(); | |
| // 验证关键环境变量 | |
| const requiredEnvVars = ['MONGODB_URI', 'JWT_SECRET', 'ADMIN_USERNAME', 'ADMIN_PASSWORD']; | |
| const missingEnvVars = requiredEnvVars.filter(envVar => !process.env[envVar]); | |
| if (missingEnvVars.length > 0) { | |
| logger.error(`缺少必要的环境变量: ${missingEnvVars.join(', ')}`); | |
| process.exit(1); | |
| } | |
| logger.info('环境变量加载成功'); | |
| logger.info(`NODE_ENV: ${process.env.NODE_ENV}`); | |
| logger.info(`ADMIN_USERNAME: ${process.env.ADMIN_USERNAME}`); | |
| logger.info(`JWT_SECRET: ${process.env.JWT_SECRET ? '已设置' : '未设置'}`); | |
| // 初始化 Express 应用 | |
| const app = express(); | |
| // 中间件 | |
| app.use(cors()); | |
| app.use(express.json({ limit: '50mb' })); | |
| app.use(express.urlencoded({ extended: true, limit: '50mb' })); | |
| // 日志中间件 | |
| if (process.env.NODE_ENV === 'development') { | |
| app.use(morgan('dev')); | |
| } | |
| // 连接数据库 | |
| connectDB(); | |
| // 路由 | |
| app.use('/api', routes); | |
| // 健康检查端点 | |
| app.get('/health', (req, res) => { | |
| res.status(200).json({ status: 'ok', message: 'Server is running' }); | |
| }); | |
| // 错误处理中间件 | |
| app.use(errorHandler); | |
| // 启动服务器 | |
| const PORT = process.env.PORT || 8080; | |
| app.listen(PORT, () => { | |
| logger.info(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`); | |
| }); | |
| // 处理未捕获的异常 | |
| process.on('uncaughtException', (err) => { | |
| logger.error('Uncaught Exception:', err); | |
| process.exit(1); | |
| }); | |
| // 处理未处理的 Promise 拒绝 | |
| process.on('unhandledRejection', (err) => { | |
| logger.error('Unhandled Rejection:', err); | |
| process.exit(1); | |
| }); |