appointment_system/docs/setup/CONFIG_API_TEST_GUIDE.md
2025-12-19 00:37:31 +08:00

6.6 KiB

Config API 测试指南

问题解决

问题: API文档打不开

原因: adminConfigRoutes.js 中使用了错误的中间件函数名 checkPermission,应该使用 requireAdmin

解决方案: 已修复,将 checkPermission 替换为 requireAdmin

问题: config表不存在

原因: 数据库迁移中包含了config表定义,但可能没有正确执行

解决方案: 运行 node create-config-table.js 创建表并初始化默认配置

API访问地址

1. Swagger UI (推荐)

http://localhost:3000/api-docs

在浏览器中打开,可以查看所有API文档并进行测试

2. OpenAPI JSON

http://localhost:3000/api-docs.json

获取完整的OpenAPI规范JSON

3. OpenAPI YAML

http://localhost:3000/api-docs.yaml

获取完整的OpenAPI规范YAML

测试Config API

方法1: 使用测试脚本

cd backend
node test-config-api.js

方法2: 使用curl命令

测试公开配置API (无需认证)

# 获取所有公开配置
curl http://localhost:3000/api/v1/config

响应示例:

{
  "code": 0,
  "message": "Configuration retrieved successfully",
  "data": {
    "app_logo": "",
    "about_us_image": "",
    "app_name": "Overseas Appointment System",
    "contact_phone": "",
    "contact_email": ""
  }
}

测试管理后台配置API (需要认证)

步骤1: 登录获取token

curl -X POST http://localhost:3000/api/v1/admin/auth/login \
  -H "Content-Type: application/json" \
  -d "{\"username\":\"admin\",\"password\":\"admin123\"}"

响应示例:

{
  "code": 0,
  "message": "Login successful",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "admin": {
      "id": "...",
      "username": "admin",
      "role": "super_admin"
    }
  }
}

步骤2: 使用token访问配置API

# 设置token变量
TOKEN="your_token_here"

# 获取所有配置
curl http://localhost:3000/api/v1/admin/config \
  -H "Authorization: Bearer $TOKEN"

# 获取单个配置
curl http://localhost:3000/api/v1/admin/config/app_name \
  -H "Authorization: Bearer $TOKEN"

# 更新配置
curl -X PUT http://localhost:3000/api/v1/admin/config/app_name \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"value\":\"My App\",\"type\":\"string\",\"category\":\"general\",\"description\":\"Application name\"}"

# 删除配置 (谨慎使用)
curl -X DELETE http://localhost:3000/api/v1/admin/config/custom_key \
  -H "Authorization: Bearer $TOKEN"

方法3: 使用Swagger UI测试

  1. 打开浏览器访问: http://localhost:3000/api-docs
  2. 找到 "Config" 或 "Admin - Config" 标签
  3. 点击要测试的接口
  4. 点击 "Try it out" 按钮
  5. 填写参数
  6. 点击 "Execute" 执行请求
  7. 查看响应结果

对于需要认证的接口:

  1. 先测试登录接口获取token
  2. 点击页面右上角的 "Authorize" 按钮
  3. 输入 Bearer your_token_here
  4. 点击 "Authorize"
  5. 现在可以测试需要认证的接口了

管理后台测试

启动管理后台

cd admin
npm run dev

访问: http://localhost:5173 (或显示的端口)

登录管理后台

  • 用户名: admin
  • 密码: admin123 (或你设置的密码)

访问系统配置页面

  1. 登录后,点击左侧菜单的 "系统配置"
  2. 可以看到三个标签页:
    • 外观配置: 上传Logo和关于我们图片
    • 基本信息: 设置应用名称
    • 联系方式: 设置联系电话和邮箱

测试配置功能

  1. 上传Logo

    • 点击Logo上传区域
    • 选择图片文件 (PNG/JPG, 最大5MB)
    • 等待上传完成
    • 点击"保存外观配置"
  2. 修改应用名称

    • 切换到"基本信息"标签
    • 修改应用名称
    • 点击"保存基本信息"
  3. 设置联系方式

    • 切换到"联系方式"标签
    • 输入联系电话和邮箱
    • 点击"保存联系方式"
  4. 验证配置生效

    • 刷新页面,检查配置是否保存
    • 或者调用公开API查看配置

常见问题

Q: API文档页面空白或加载失败

A: 检查以下几点:

  1. 后端服务是否正常运行: http://localhost:3000/health
  2. 查看后端日志是否有错误
  3. 检查浏览器控制台是否有JavaScript错误
  4. 尝试清除浏览器缓存

Q: 配置保存后不生效

A:

  1. 检查Redis是否正常运行
  2. 清除Redis缓存: redis-cli FLUSHDB
  3. 重启后端服务

Q: 图片上传失败

A:

  1. 检查 backend/uploads 目录是否存在且有写入权限
  2. 检查文件大小是否超过5MB
  3. 检查文件格式是否为PNG或JPG
  4. 查看后端日志获取详细错误信息

Q: 401 Unauthorized错误

A:

  1. 确认已登录并获取token
  2. 检查token是否过期
  3. 确认请求头格式: Authorization: Bearer <token>
  4. 检查用户是否有管理员权限

Q: 403 Forbidden错误

A:

  1. 确认用户角色是否为admin或super_admin
  2. 检查RBAC权限配置
  3. 查看后端日志获取详细权限信息

数据库操作

查看config表数据

使用数据库客户端或命令行:

USE overseas_appointment;
SELECT * FROM config;

手动插入配置

INSERT INTO config (id, `key`, value, type, category, description, created_at, updated_at)
VALUES (UUID(), 'custom_key', 'custom_value', 'string', 'general', 'Custom configuration', NOW(), NOW());

清空配置表 (谨慎!)

TRUNCATE TABLE config;

然后运行初始化脚本恢复默认配置:

node create-config-table.js

开发建议

添加新配置项

  1. configService.jsinitializeDefaults 方法中添加默认值
  2. 在管理后台页面添加对应的表单字段
  3. 如需公开给小程序,在 getPublicConfigs 方法中添加配置键名
  4. 更新API文档

配置缓存策略

  • 默认缓存时间: 1小时
  • 修改配置时自动清除缓存
  • 可在 configService.js 中调整 CACHE_TTL 常量

安全建议

  1. 不要在公开API中暴露敏感配置
  2. 定期备份配置数据
  3. 重要配置修改前先记录当前值
  4. 使用环境变量存储真正的敏感信息(如密钥)

相关文件

  • API文档: backend/src/docs/admin-config.docs.js, backend/src/docs/config.docs.js
  • 路由: backend/src/routes/adminConfigRoutes.js, backend/src/routes/configRoutes.js
  • 控制器: backend/src/controllers/adminConfigController.js, backend/src/controllers/configController.js
  • 服务: backend/src/services/configService.js
  • 模型: backend/src/models/Config.js
  • 前端页面: admin/src/views/config/index.vue
  • 测试脚本: backend/test-config-api.js, backend/create-config-table.js
  • 完整文档: CONFIG_MANAGEMENT.md