refactor: 项目架构重构 - 目录标准化 + 清理冗余

- 目录重命名: backend/wdkj-server/ → server/, frontend/ai-dimension/ → client/
- 删除 20+ 冗余文件(WDKJ 旧脚本、Windows 脚本、过时文档、设计稿)
- 更新 package.json 元数据(移除 wdkj 命名)
- 完善三级 .gitignore(根 + server + client)
- 重写 README.md 和 CHANGELOG.md
- 工具脚本移至 scripts/
This commit is contained in:
Yuzhiran Dev
2026-07-11 12:45:37 +08:00
parent 66ac576082
commit c1d6dd3b29
106 changed files with 17436 additions and 2311 deletions
+97
View File
@@ -0,0 +1,97 @@
require('dotenv').config()
const express = require('express')
const cors = require('cors')
const helmet = require('helmet')
const compression = require('compression')
const morgan = require('morgan')
const rateLimit = require('express-rate-limit')
const connectDB = require('./config/database')
const initRoutes = require('./routes')
const logger = require('./utils/logger')
// 创建 Express 应用
const app = express()
// 数据库连接
connectDB()
// 中间件配置
app.use(helmet()) // 安全头部
app.use(cors()) // 跨域支持
app.use(compression()) // Gzip 压缩
app.use(express.json({ limit: '10mb' })) // JSON 解析
app.use(express.urlencoded({ extended: true, limit: '10mb' })) // URL 编码解析
// 日志中间件
if (process.env.NODE_ENV === 'development') {
app.use(morgan('dev'))
} else {
app.use(morgan('combined'))
}
// 速率限制
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 分钟
max: 1000, // 每个 IP 最多 1000 次请求
message: {
success: false,
error: '请求过于频繁,请稍后再试'
}
})
app.use('/api/', limiter)
// 健康检查
app.get('/health', (req, res) => {
res.status(200).json({
status: 'ok',
timestamp: new Date().toISOString(),
uptime: process.uptime()
})
})
// API 路由
initRoutes(app)
// 404 处理
app.use((req, res) => {
res.status(404).json({
success: false,
error: '接口不存在',
path: req.path
})
})
// 全局错误处理
app.use((err, req, res, next) => {
logger.error('服务器错误:', err)
res.status(err.status || 500).json({
success: false,
error: process.env.NODE_ENV === 'production'
? '服务器内部错误'
: err.message,
stack: process.env.NODE_ENV === 'development' ? err.stack : undefined
})
})
// 启动服务器
const PORT = process.env.PORT || 3000
const server = app.listen(PORT, () => {
logger.info(`🚀 服务器启动成功`)
logger.info(`📍 端口: ${PORT}`)
logger.info(`🌐 环境: ${process.env.NODE_ENV || 'development'}`)
logger.info(`📊 健康检查: http://localhost:${PORT}/health`)
})
// 优雅关闭
process.on('SIGTERM', () => {
logger.info('📴 接收到 SIGTERM 信号,正在关闭服务器...')
server.close(() => {
logger.info('✅ 服务器已关闭')
process.exit(0)
})
})
module.exports = app