2.9 KiB
2.9 KiB
修复加载用户数据失败问题
问题分析
错误信息
- "加载用户数据失败: Unexpected non-whitespace character after JSON at position 4 (line 1 column 5)"
根本原因
- 客户端:UserForm.vue调用
fetchUser(userId)函数,尝试访问GET /admin/users/:id接口获取用户详情 - 服务器端:在main.go中缺少
GET /users/:id路由,导致请求被错误处理 - 响应格式:服务器返回非JSON格式响应(可能是HTML错误页面),客户端尝试解析为JSON导致解析错误
检查结果
- 服务器端存在
adminGetUsers、adminCreateUser、adminUpdateUser、adminDeleteUser函数 - 缺少
adminGetUser函数用于处理单个用户详情请求 - 路由配置中缺少
GET /users/:id路由
解决方案
修复步骤
-
创建adminGetUser函数:
- 在server/main.go中添加获取单个用户详情的处理函数
- 调用repositories层的GetUserByID函数(需要检查是否存在)
- 返回JSON格式的用户详情响应
-
添加GET /users/:id路由:
- 在server/main.go的authAdmin路由组中添加
GET /users/:id路由 - 绑定到adminGetUser函数
- 添加适当的中间件(如RoleMiddleware)
- 在server/main.go的authAdmin路由组中添加
-
检查repositories层:
- 检查是否存在GetUserByID函数
- 如果不存在,需要创建该函数
-
测试验证:
- 重启服务器
- 测试编辑用户功能,确保能正确加载用户数据
预期效果
- 客户端能成功获取用户详情数据
- 不再出现JSON解析错误
- 用户编辑表单能正确填充现有数据
实现细节
1. 检查并创建GetUserByID函数
- 检查repositories/user_repository.go是否存在GetUserByID函数
- 如果不存在,创建该函数:
func GetUserByID(id uint) (*models.User, error) { // 实现逻辑 }
2. 创建adminGetUser函数
- 在server/main.go中添加:
// 获取单个用户详情 func adminGetUser(c *gin.Context) { id, err := strconv.ParseUint(c.Param("id"), 10, 32) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid user ID"}) return } user, err := repositories.GetUserByID(uint(id)) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "User not found"}) return } c.JSON(http.StatusOK, repositories.BuildUserResponse(user)) }
3. 添加GET /users/:id路由
- 在server/main.go的authAdmin路由组中添加:
authAdmin.GET("/users/:id", middleware.RoleMiddleware("admin"), adminGetUser)
4. 重启服务器并测试
- 重启服务器使新路由生效
- 访问编辑用户页面,验证能正确加载用户数据
风险评估
- 修复后对现有功能无影响
- 仅添加新功能,不修改现有逻辑
- 遵循现有的代码架构和风格
- 与其他资源的详情API保持一致的实现方式