config.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /**
  2. * 配置路由模块 - 使用SQLite数据库
  3. */
  4. const express = require('express');
  5. const router = express.Router();
  6. const logger = require('../logger');
  7. const { requireLogin } = require('../middleware/auth');
  8. const configServiceDB = require('../services/configServiceDB');
  9. // 获取配置
  10. router.get('/config', async (req, res) => {
  11. try {
  12. const config = await configServiceDB.getConfig();
  13. // 如果配置为空,使用默认配置
  14. if (!config || Object.keys(config).length === 0) {
  15. const defaultConfig = configServiceDB.getDefaultConfig();
  16. res.json(defaultConfig);
  17. } else {
  18. // 合并默认配置和数据库配置,数据库配置优先
  19. const defaultConfig = configServiceDB.getDefaultConfig();
  20. const mergedConfig = { ...defaultConfig, ...config };
  21. res.json(mergedConfig);
  22. }
  23. } catch (error) {
  24. logger.error('获取配置失败:', error);
  25. // 只在真正出错时返回默认配置
  26. const defaultConfig = configServiceDB.getDefaultConfig();
  27. res.json(defaultConfig);
  28. }
  29. });
  30. // 保存配置
  31. router.post('/config', async (req, res) => {
  32. try {
  33. const newConfig = req.body;
  34. // 验证请求数据
  35. if (!newConfig || typeof newConfig !== 'object') {
  36. return res.status(400).json({
  37. error: '无效的配置数据',
  38. details: '配置必须是一个对象'
  39. });
  40. }
  41. // 保存配置到数据库
  42. await configServiceDB.saveConfigs(newConfig);
  43. res.json({ success: true, message: '配置已保存' });
  44. } catch (error) {
  45. logger.error('保存配置失败:', error);
  46. res.status(500).json({
  47. error: '保存配置失败',
  48. details: error.message
  49. });
  50. }
  51. });
  52. // 获取配置 - 兼容旧路由
  53. router.get('/', async (req, res) => {
  54. try {
  55. const config = await configServiceDB.getConfig();
  56. res.json(config);
  57. } catch (error) {
  58. logger.error('读取配置失败:', error);
  59. const defaultConfig = configServiceDB.getDefaultConfig();
  60. res.json(defaultConfig);
  61. }
  62. });
  63. // 保存配置 - 兼容旧路由
  64. router.post('/', async (req, res) => {
  65. try {
  66. const newConfig = req.body;
  67. if (!newConfig || typeof newConfig !== 'object') {
  68. return res.status(400).json({
  69. error: '无效的配置数据',
  70. details: '配置必须是一个对象'
  71. });
  72. }
  73. await configServiceDB.saveConfigs(newConfig);
  74. res.json({ success: true, message: '配置已保存' });
  75. } catch (error) {
  76. logger.error('保存配置失败:', error);
  77. res.status(500).json({
  78. error: '保存配置失败',
  79. details: error.message
  80. });
  81. }
  82. });
  83. // 获取菜单项配置
  84. router.get('/menu-items', async (req, res) => {
  85. try {
  86. const menuItems = await configServiceDB.getMenuItems();
  87. res.json(menuItems);
  88. } catch (error) {
  89. logger.error('获取菜单项失败:', error);
  90. res.status(500).json({ error: '获取菜单项失败', details: error.message });
  91. }
  92. });
  93. // 保存菜单项配置
  94. router.post('/menu-items', requireLogin, async (req, res) => {
  95. try {
  96. const { menuItems } = req.body;
  97. if (!Array.isArray(menuItems)) {
  98. return res.status(400).json({
  99. error: '无效的菜单项数据',
  100. details: '菜单项必须是一个数组'
  101. });
  102. }
  103. await configServiceDB.saveMenuItems(menuItems);
  104. res.json({ success: true, message: '菜单项配置已保存' });
  105. } catch (error) {
  106. logger.error('保存菜单项失败:', error);
  107. res.status(500).json({ error: '保存菜单项失败', details: error.message });
  108. }
  109. });
  110. module.exports = router;