You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
8.9 KiB
8.9 KiB
配置管理逻辑文档
本文档详细介绍了 Alpha Futures Pro 系统中配置管理的实现逻辑,包括配置的获取、保存、存储位置等内容。
配置管理架构
- 前端组件:
AdminConfig.jsx(管理配置界面) - 后端 API:
config.ts(配置管理接口) - 配置存储:
backend/config.json(JSON 格式文件)
前端配置管理逻辑
1. 获取配置
文件位置:src/pages/admin/AdminConfig.jsx
函数:fetchConfig(第174-205行)
实现逻辑:
const fetchConfig = async () => {
try {
// 调用后端 API 获取配置
const response = await fetch('http://localhost:3007/api/config/get');
const result = await response.json();
if (result.success) {
// 更新本地配置状态
const newConfig = result.data;
setConfig(newConfig);
// 更新表单字段值
form.setFieldsValue({
database: newConfig.database,
server: newConfig.server,
security: {
...newConfig.security,
cors: {
...newConfig.security.cors,
methods: newConfig.security.cors.methods.join(', '),
allowedHeaders: newConfig.security.cors.allowedHeaders.join(', ')
}
},
dataSource: newConfig.dataSource
});
messageApi.success('配置加载成功');
} else {
messageApi.error('配置加载失败');
}
} catch (error) {
console.error('获取配置失败:', error);
messageApi.error('获取配置失败,请检查网络连接');
}
};
调用时机:
- 组件挂载时(通过 useEffect 钩子)
- 保存配置成功后(重新获取最新配置)
2. 保存配置
文件位置:src/pages/admin/AdminConfig.jsx
函数:handleSubmit(第208-228行)
实现逻辑:
const handleSubmit = async (values) => {
try {
// 调用后端 API 保存配置
const response = await fetch('http://localhost:3007/api/config/save', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(config)
});
const result = await response.json();
if (result.success) {
messageApi.success(result.message);
// 保存成功后重新获取配置
fetchConfig();
} else {
messageApi.error(result.message);
}
} catch (error) {
console.error('保存配置失败:', error);
messageApi.error('保存配置失败,请检查网络连接');
}
};
调用时机:
- 用户点击 "保存配置" 按钮时
后端配置管理逻辑
1. 获取配置 API
文件位置:backend/src/api/config.ts
路由:/api/config/get(第151-169行)
实现逻辑:
// 获取配置
router.get('/get', async (req, res) => {
try {
// 从文件读取配置
const fs = require('fs');
const path = require('path');
const configPath = path.join(__dirname, '../../config.json');
let config = {};
if (fs.existsSync(configPath)) {
const configData = fs.readFileSync(configPath, 'utf8');
config = JSON.parse(configData);
}
res.status(200).json({ success: true, data: config });
} catch (error) {
console.error('获取配置失败:', error);
res.status(500).json({ success: false, message: '获取配置失败' });
}
});
功能:
- 从
backend/config.json文件读取配置 - 如果文件不存在,返回空对象
- 将配置数据以 JSON 格式返回给前端
2. 保存配置 API
文件位置:backend/src/api/config.ts
路由:/api/config/save(第131-148行)
实现逻辑:
// 保存配置
router.post('/save', async (req, res) => {
try {
// 获取前端发送的配置数据
const config = req.body;
console.log('保存配置:', config);
// 保存配置到文件
const fs = require('fs');
const path = require('path');
const configPath = path.join(__dirname, '../../config.json');
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
res.status(200).json({ success: true, message: '配置保存成功' });
} catch (error) {
console.error('保存配置失败:', error);
res.status(500).json({ success: false, message: '保存配置失败' });
}
});
功能:
- 接收前端发送的配置数据
- 将配置数据写入
backend/config.json文件 - 返回保存成功的提示信息
配置存储位置
配置文件:backend/config.json
文件格式:JSON 格式
存储内容:
- 数据库配置(MongoDB、PostgreSQL、Redis、InfluxDB)
- 服务器配置(端口、主机、环境等)
- 安全配置(JWT、速率限制、CORS 等)
- 数据源配置(测试数据、TQSDK、Wind、新浪财经等)
文件示例:
{
"database": {
"mongoDB": {
"host": "localhost",
"port": 27017,
"database": "alpha-futures",
"username": "",
"password": "",
"authSource": "admin",
"ssl": false,
"enabled": true
},
"postgreSQL": {
"host": "localhost",
"port": 5432,
"database": "alpha-futures",
"username": "postgres",
"password": "password",
"ssl": false,
"enabled": true
},
"redis": {
"host": "localhost",
"port": 6379,
"password": "",
"db": 0,
"enabled": true
},
"influxDB": {
"host": "localhost",
"port": 8086,
"database": "alpha-futures",
"username": "",
"password": "",
"ssl": false,
"enabled": true
}
},
"server": {
"port": 3007,
"host": "0.0.0.0",
"environment": "development",
"debug": true,
"timeout": 30000,
"maxBodySize": "10mb"
},
"security": {
"jwtSecret": "your-secret-key",
"jwtExpiresIn": "7d",
"rateLimit": {
"windowMs": 60000,
"max": 120
},
"cors": {
"origin": "*",
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
"allowedHeaders": ["Content-Type", "Authorization"]
}
},
"dataSource": {
"test": {
"enabled": true,
"timeout": 10000,
"retries": 3,
"refreshInterval": 60000
},
"tqsdk": {
"enabled": true,
"username": "",
"password": "",
"timeout": 30000,
"retries": 3,
"maxConnections": 5
},
"wind": {
"enabled": false,
"apiKey": "",
"apiSecret": "",
"url": "https://api.wind.com.cn",
"timeout": 30000,
"retries": 3
},
"sina": {
"enabled": false,
"url": "https://finance.sina.com.cn",
"timeout": 10000,
"retries": 3,
"refreshInterval": 60000
},
"defaultDataSource": "tqsdk"
}
}
配置管理流程
1. 系统启动时
- 后端服务启动,从
backend/config.json文件读取配置 - 如果配置文件不存在,使用默认配置
- 前端应用启动,加载
AdminConfig组件 AdminConfig组件挂载时调用fetchConfig函数获取配置
2. 用户修改配置时
- 用户在管理配置界面修改配置项
- 前端实时更新本地配置状态
- 用户点击 "保存配置" 按钮
- 前端调用
handleSubmit函数,将配置发送到后端 - 后端接收配置数据,写入
config.json文件 - 后端返回保存成功的响应
- 前端显示成功提示,并重<EFBFBD><EFBFBD><EFBFBD>获取配置以更新本地状态
3. 配置生效
- 前端:配置修改后立即在界面上生效
- 后端:配置保存后,新的配置会在下次服务重启时生效
- 数据源配置:修改后需要重启后端服务才能完全生效
注意事项
- 配置文件权限:确保后端服务有读写
config.json文件的权限 - 配置格式:配置数据必须是有效的 JSON 格式
- 敏感信息:配置文件中包含敏感信息(如数据库密码、TQSDK 用户名密码),请妥善保管
- 配置备份:建议定期备份
config.json文件,以防止配置丢失 - 服务重启:修改某些配置项(如服务器端口、数据库连接信息)后,需要重启后端服务才能生效
故障排查
1. 获取配置失败
症状:前端显示 "获取配置失败" 错误
解决方案:
- 检查后端服务是否正常运行
- 检查
config.json文件是否存在且格式正确 - 检查后端 API 是否可以正常访问
2. 保存配置失败
症状:前端显示 "保存配置失败" 错误
解决方案:
- 检查后端服务是否正常运行
- 检查
config.json文件是否有写入权限 - 检查配置数据是否格式正确
- 检查后端日志中的错误信息
3. 配置不生效
症状:修改配置后,系统行为没有改变
解决方案:
- 检查配置是否成功保存到
config.json文件 - 尝试重启后端服务
- 检查配置项是否正确设置
文档版本:v1.0 最后更新:2026-02-20