后端: - config.ts 使用 requireAdmin 中间件,统一响应格式 - feedback.ts 使用 requireAdmin 中间件,移除重复权限检查 - feedback.ts 添加 affectedRows 检查(反馈不存在时返回 404) - 全局错误处理中间件兜底未捕获异常 前端: - request.ts 添加 15 秒请求超时设置
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { Router } from 'express'
|
||
import pool from '../db/connection'
|
||
import { requireAdmin } from '../middleware/requireAdmin'
|
||
|
||
const router = Router()
|
||
|
||
/** 获取公开配置(经过全局 authMiddleware,无需管理员权限) */
|
||
router.get('/', async (_req, res) => {
|
||
try {
|
||
const [rows] = await pool.execute('SELECT config_key, config_value FROM sys_config')
|
||
const config: Record<string, string> = {}
|
||
for (const row of rows as any[]) {
|
||
config[row.config_key] = row.config_value
|
||
}
|
||
res.json({ code: 0, data: config })
|
||
} catch (error) {
|
||
console.error('Get config error:', error)
|
||
res.status(500).json({ code: 50000, message: '获取配置失败' })
|
||
}
|
||
})
|
||
|
||
/** 更新配置(管理员权限) */
|
||
router.put('/', requireAdmin, async (req, res) => {
|
||
try {
|
||
const data = req.body
|
||
if (!data || typeof data !== 'object') {
|
||
return res.status(400).json({ code: 40001, message: '无效的配置数据' })
|
||
}
|
||
|
||
// 批量更新配置
|
||
for (const [key, value] of Object.entries(data)) {
|
||
await pool.query(
|
||
'INSERT INTO sys_config (config_key, config_value) VALUES (?, ?) ON DUPLICATE KEY UPDATE config_value = ?',
|
||
[key, value, value]
|
||
)
|
||
}
|
||
|
||
res.json({ code: 0 })
|
||
} catch (error) {
|
||
console.error('Update config error:', error)
|
||
res.status(500).json({ code: 50000, message: '更新配置失败' })
|
||
}
|
||
})
|
||
|
||
export default router
|