项目初始化

This commit is contained in:
Stev_Wang
2025-12-22 23:51:21 +08:00
commit 4a97b964ac
64 changed files with 8371 additions and 0 deletions

View File

@@ -0,0 +1,153 @@
import { Router, Request, Response } from 'express'
import axios from 'axios'
import { authMiddleware } from '../middleware/authMiddleware'
import * as dotenv from 'dotenv'
// 加载环境变量
dotenv.config()
const router = Router()
// 游戏服务端API基础URL
const GAME_API_URL = process.env.GAME_API_URL || 'http://127.0.0.1:8080/tool/http'
// 检查游戏服务状态
router.get('/status', authMiddleware, async (req: Request, res: Response) => {
try {
// 获取PSK密钥
const GAME_PSK = process.env.GAME_PSK
if (!GAME_PSK) {
return res.status(500).json({
success: false,
message: '游戏服务端PSK密钥未配置'
})
}
// 发送测试请求到游戏服务端API
const response = await axios.post(GAME_API_URL, { code: 'account/get_account_list', page: 1, pageSize: 1 }, {
headers: {
'Content-Type': 'application/json',
'psk': GAME_PSK // 添加PSK认证头
},
timeout: 5000, // 设置5秒超时
proxy: false // 禁用代理,确保请求直接发送到目标服务器
})
return res.status(200).json({
success: true,
message: '游戏服务端连接成功',
data: {
status: 'online',
responseTime: response.config.timeout
}
})
} catch (error: unknown) {
console.error('游戏服务状态检查失败:', error)
if (axios.isAxiosError(error)) {
// Axios错误处理
if (error.code === 'ECONNREFUSED') {
return res.status(200).json({
success: false,
message: '游戏服务端连接失败',
data: {
status: 'offline',
error: '游戏服务端未响应,请检查游戏服务端是否正常运行'
}
})
} else if (error.code === 'ECONNABORTED') {
return res.status(200).json({
success: false,
message: '游戏服务端请求超时',
data: {
status: 'timeout',
error: '游戏服务端响应超时'
}
})
}
}
return res.status(200).json({
success: false,
message: '游戏服务端状态检查失败',
data: {
status: 'error',
error: '未知错误'
}
})
}
})
// 转发请求到游戏服务端API需要认证
router.post('/', authMiddleware, async (req: Request, res: Response) => {
try {
// 获取游戏服务端API路径和参数
const { path, params } = req.body
if (!path) {
return res.status(400).json({
success: false,
message: '缺少游戏服务端API路径'
})
}
// 获取PSK密钥
const GAME_PSK = process.env.GAME_PSK
if (!GAME_PSK) {
return res.status(500).json({
success: false,
message: '游戏服务端PSK密钥未配置'
})
}
// 构建完整的请求URL
const apiUrl = `${GAME_API_URL}`
// 发送请求到游戏服务端API禁用代理确保直接连接
const response = await axios.post(apiUrl, { code: path, ...params }, {
headers: {
'Content-Type': 'application/json',
'psk': GAME_PSK // 添加PSK认证头
},
timeout: 10000, // 设置10秒超时
proxy: false // 禁用代理,确保请求直接发送到目标服务器
})
// 返回游戏服务端API的响应
res.status(200).json({
success: true,
message: '游戏服务端API调用成功',
data: response.data
})
} catch (error: unknown) {
console.error('游戏服务端API调用失败:', error)
if (axios.isAxiosError(error)) {
// Axios错误处理
if (error.code === 'ECONNREFUSED') {
return res.status(503).json({
success: false,
message: '游戏服务端连接失败,请检查游戏服务端是否正常运行'
})
} else if (error.code === 'ECONNABORTED') {
return res.status(504).json({
success: false,
message: '游戏服务端API请求超时'
})
}
return res.status(error.response?.status || 500).json({
success: false,
message: error.response?.data?.message || '游戏服务端API调用失败',
data: error.response?.data
})
}
res.status(500).json({
success: false,
message: '游戏服务端API调用失败请稍后重试'
})
}
})
export default router