Generating commit message...

This commit is contained in:
2025-08-30 14:33:49 +08:00
parent 4d469e95f0
commit 7f9bfbb381
99 changed files with 69225 additions and 35 deletions

100
backend/src/app.js Normal file
View File

@@ -0,0 +1,100 @@
const express = require('express')
const cors = require('cors')
const helmet = require('helmet')
const morgan = require('morgan')
const rateLimit = require('express-rate-limit')
const xss = require('xss-clean')
const hpp = require('hpp')
console.log('🔧 初始化Express应用...')
const { globalErrorHandler, notFound } = require('./utils/errors')
// 路由导入
const authRoutes = require('./routes/auth')
// 其他路由将在这里导入
const app = express()
console.log('✅ Express应用初始化完成')
// 安全中间件
app.use(helmet())
// CORS配置
app.use(cors({
origin: process.env.NODE_ENV === 'production'
? ['https://your-domain.com']
: ['http://localhost:9000', 'http://localhost:3000'],
credentials: true
}))
// 请求日志
if (process.env.NODE_ENV === 'development') {
app.use(morgan('dev'))
} else {
app.use(morgan('combined'))
}
// 请求频率限制
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15分钟
max: process.env.NODE_ENV === 'production' ? 100 : 1000, // 生产环境100次开发环境1000次
message: {
success: false,
code: 429,
message: '请求过于频繁,请稍后再试',
timestamp: new Date().toISOString()
}
})
app.use('/api', limiter)
// 请求体解析
app.use(express.json({ limit: '10kb' }))
app.use(express.urlencoded({ extended: true, limit: '10kb' }))
// 数据清洗
app.use(xss()) // 防止XSS攻击
app.use(hpp({ // 防止参数污染
whitelist: [
'page',
'pageSize',
'sort',
'fields',
'price',
'rating',
'distance'
]
}))
// 静态文件服务
app.use('/uploads', express.static('uploads'))
// 健康检查路由
app.get('/health', (req, res) => {
res.status(200).json({
status: 'OK',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
environment: process.env.NODE_ENV || 'development'
})
})
// API路由
app.use('/api/v1/auth', authRoutes)
// 其他API路由将在这里添加
// app.use('/api/v1/users', userRoutes)
// app.use('/api/v1/travel', travelRoutes)
// app.use('/api/v1/animals', animalRoutes)
// app.use('/api/v1/flowers', flowerRoutes)
// app.use('/api/v1/orders', orderRoutes)
// 404处理
app.use('*', notFound)
// 全局错误处理
app.use(globalErrorHandler)
console.log('✅ 应用配置完成')
module.exports = app