书籍显示问题完整修复指南.md 13 KB

书籍显示问题完整修复指南

🔴 问题现象

前端页面显示"暂无推荐书籍"和"暂无畅销书籍",书籍列表不显示。

✅ 已完成的修复

1. 前端错误处理增强

  • ✅ 添加了详细的调试日志(console.log)
  • ✅ 添加了错误提示(uni.showToast)
  • ✅ 改进了数据验证逻辑
  • ✅ 添加了加载状态显示
  • ✅ 添加了空状态提示

2. 数据验证改进

  • ✅ 检查 res.code === 200
  • ✅ 检查 res.data 是否存在
  • ✅ 检查 res.data 是否为数组
  • ✅ 检查数组长度是否大于0

🔍 问题排查步骤

步骤1:检查数据库是否有数据 ⭐ 最重要

在 Navicat 中执行:

USE books_db;

-- 1. 检查书籍总数
SELECT COUNT(*) as total FROM books;

-- 2. 检查上架的书籍数量(status=1)
SELECT COUNT(*) as total FROM books WHERE status = 1;

-- 3. 查看今日推荐应该返回的数据
SELECT id, title, status, created_at 
FROM books 
WHERE status = 1 
ORDER BY created_at DESC 
LIMIT 8;

-- 4. 查看畅销书籍应该返回的数据
SELECT id, title, status, read_count, view_count 
FROM books 
WHERE status = 1 
ORDER BY read_count DESC, view_count DESC 
LIMIT 10;

如果查询结果为空或数量为0,说明数据库中没有数据,需要执行SQL脚本。

步骤2:执行SQL脚本插入数据 ⭐ 必须执行

方法1:执行快速插入脚本(推荐)

在 Navicat 中执行 book/src/main/resources/db/quick_insert_books.sql 文件。

方法2:执行完整数据脚本

在 Navicat 中执行 book/src/main/resources/db/books_recommend_data.sql 文件。

方法3:手动执行SQL

USE books_db;

-- 插入今日推荐书籍(8本)
INSERT INTO `books` (`title`, `author`, `cover`, `image`, `brief`, `desc`, `introduction`, `price`, `is_free`, `is_vip`, `category_id`, `status`, `view_count`, `like_count`, `read_count`, `created_at`, `updated_at`) VALUES
('西游记', '(明) 吴承恩', 'https://picsum.photos/seed/xiyouji/200/300', 'https://picsum.photos/seed/xiyouji/200/300', '《西游记》是中国古代第一部神魔题材的长篇章回小说', '中国古代第一部浪漫主义章回体长篇神魔小说', '本书《西游记》是中国古代第一部浪漫主义章回体长篇神魔小说', 0.00, 1, 0, 1, 1, 850, 120, 450, NOW(), NOW()),
('传习录:全译全注', '王阳明', 'https://picsum.photos/seed/chuanxilu/200/300', 'https://picsum.photos/seed/chuanxilu/200/300', '王阳明心学的核心著作', '王阳明心学的核心著作', '传习录是王阳明心学的核心著作', 0.00, 1, 0, 1, 1, 620, 89, 320, NOW(), NOW()),
('社会契约论', '让·雅克·卢梭', 'https://picsum.photos/seed/shehuiqiyue/200/300', 'https://picsum.photos/seed/shehuiqiyue/200/300', '探讨了政治权力的合法性和人民主权的基本原则', '探讨了政治权力的合法性和人民主权的基本原则', '社会契约论是让·雅克·卢梭的重要政治哲学著作', 0.00, 1, 0, 1, 1, 480, 67, 280, NOW(), NOW()),
('没有烦恼的世界', '一行禅师', 'https://picsum.photos/seed/meiyoufan-nao/200/300', 'https://picsum.photos/seed/meiyoufan-nao/200/300', '一行禅师的心灵成长著作', '一行禅师的心灵成长著作', '《没有烦恼的世界》是一行禅师的心灵成长著作', 0.00, 1, 0, 1, 1, 390, 56, 210, NOW(), NOW()),
('透过电影看文化', '张艺谋', 'https://picsum.photos/seed/dianyingwenhua/200/300', 'https://picsum.photos/seed/dianyingwenhua/200/300', '通过电影作品探讨文化内涵', '通过电影作品探讨文化内涵', '《透过电影看文化》通过分析经典电影作品', 0.00, 1, 0, 1, 1, 320, 45, 180, NOW(), NOW()),
('车尔尼钢琴流畅练习曲', '卡尔·车尔尼', 'https://picsum.photos/seed/cheerni/200/300', 'https://picsum.photos/seed/cheerni/200/300', '钢琴练习经典教材', '钢琴练习经典教材', '《车尔尼钢琴流畅练习曲》是钢琴练习的经典教材', 0.00, 1, 0, 1, 1, 280, 38, 150, NOW(), NOW()),
('走向大洋', '余秋雨', 'https://picsum.photos/seed/zouxiangdayang/200/300', 'https://picsum.photos/seed/zouxiangdayang/200/300', '余秋雨的旅行散文集', '余秋雨的旅行散文集', '《走向大洋》是余秋雨的旅行散文集', 0.00, 1, 0, 1, 1, 250, 34, 130, NOW(), NOW()),
('思维的艺术', '丹尼尔·卡尼曼', 'https://picsum.photos/seed/siweideyishu/200/300', 'https://picsum.photos/seed/siweideyishu/200/300', '探讨人类思维方式和决策过程', '探讨人类思维方式和决策过程', '《思维的艺术》是丹尼尔·卡尼曼的经典著作', 0.00, 1, 0, 1, 1, 220, 30, 110, NOW(), NOW());

-- 插入畅销书籍(10本,阅读量较高)
INSERT INTO `books` (`title`, `author`, `cover`, `image`, `brief`, `desc`, `introduction`, `price`, `is_free`, `is_vip`, `category_id`, `status`, `view_count`, `like_count`, `read_count`, `created_at`, `updated_at`) VALUES
('互联网心理学', '雷雳', 'https://picsum.photos/seed/hulianwangxinlixue/200/300', 'https://picsum.photos/seed/hulianwangxinlixue/200/300', '当连接万物的互联网遇见无处不在的心理学', '当连接万物的互联网遇见无处不在的心理学', '《互联网心理学》探讨了互联网时代人们的心理变化', 0.00, 1, 0, 1, 1, 5680, 890, 3450, DATE_SUB(NOW(), INTERVAL 30 DAY), NOW()),
('孝经 (中华经典诵读)', '孔子', 'https://picsum.photos/seed/xiaojing/200/300', 'https://picsum.photos/seed/xiaojing/200/300', '以孔子与其弟子曾参之间问答的形式', '以孔子与其弟子曾参之间问答的形式', '《孝经》是中国古代重要的儒家经典', 0.00, 1, 0, 1, 1, 4920, 756, 2980, DATE_SUB(NOW(), INTERVAL 25 DAY), NOW()),
('自省', '约翰·班扬', 'https://picsum.photos/seed/zixing/200/300', 'https://picsum.photos/seed/zixing/200/300', '讲述了敬虔之人和不敬虔之人截然相反的结局', '讲述了敬虔之人和不敬虔之人截然相反的结局', '《自省》是约翰·班扬的经典作品', 0.00, 1, 0, 1, 1, 4250, 634, 2670, DATE_SUB(NOW(), INTERVAL 20 DAY), NOW()),
('三体', '刘慈欣', 'https://picsum.photos/seed/santi/200/300', 'https://picsum.photos/seed/santi/200/300', '科幻小说,讲述了地球文明与三体文明', '科幻小说,讲述了地球文明与三体文明', '《三体》是刘慈欣创作的科幻小说', 29.90, 0, 0, 3, 1, 3680, 567, 2340, DATE_SUB(NOW(), INTERVAL 35 DAY), NOW()),
('理想国', '柏拉图', 'https://picsum.photos/seed/lixiangguo/200/300', 'https://picsum.photos/seed/lixiangguo/200/300', '古希腊哲学家柏拉图的经典著作', '古希腊哲学家柏拉图的经典著作', '《理想国》是古希腊哲学家柏拉图的经典著作', 0.00, 1, 1, 4, 1, 3120, 489, 1980, DATE_SUB(NOW(), INTERVAL 40 DAY), NOW()),
('红楼梦', '曹雪芹', 'https://picsum.photos/seed/hongloumeng/200/300', 'https://picsum.photos/seed/hongloumeng/200/300', '中国古典四大名著之一', '中国古典四大名著之一', '《红楼梦》是清代作家曹雪芹创作的长篇小说', 0.00, 1, 0, 1, 1, 2890, 456, 1780, DATE_SUB(NOW(), INTERVAL 45 DAY), NOW()),
('百年孤独', '加西亚·马尔克斯', 'https://picsum.photos/seed/bainiangudu/200/300', 'https://picsum.photos/seed/bainiangudu/200/300', '魔幻现实主义文学的代表作', '魔幻现实主义文学的代表作', '《百年孤独》是加西亚·马尔克斯的经典作品', 39.90, 0, 0, 1, 1, 2670, 423, 1650, DATE_SUB(NOW(), INTERVAL 50 DAY), NOW()),
('人类简史', '尤瓦尔·赫拉利', 'https://picsum.photos/seed/renleijianshi/200/300', 'https://picsum.photos/seed/renleijianshi/200/300', '从认知革命到科学革命', '从认知革命到科学革命', '《人类简史》是尤瓦尔·赫拉利的畅销作品', 49.90, 0, 0, 1, 1, 2450, 398, 1520, DATE_SUB(NOW(), INTERVAL 55 DAY), NOW()),
('活着', '余华', 'https://picsum.photos/seed/huozhe/200/300', 'https://picsum.photos/seed/huozhe/200/300', '余华的代表作', '余华的代表作', '《活着》是余华的代表作', 0.00, 1, 0, 1, 1, 2230, 367, 1390, DATE_SUB(NOW(), INTERVAL 60 DAY), NOW()),
('围城', '钱钟书', 'https://picsum.photos/seed/weicheng/200/300', 'https://picsum.photos/seed/weicheng/200/300', '中国现代文学的经典之作', '中国现代文学的经典之作', '《围城》是钱钟书的经典作品', 0.00, 1, 0, 1, 1, 2010, 334, 1250, DATE_SUB(NOW(), INTERVAL 65 DAY), NOW());

步骤3:检查后端服务是否启动

cd book
mvn spring-boot:run

验证后端服务

  • 在浏览器中访问:http://localhost:8081/api/book/today-recommend?limit=8
  • 应该返回JSON数据,包含书籍列表

步骤4:测试API接口

方法1:浏览器测试

在浏览器中访问:

  • 今日推荐:http://localhost:8081/api/book/today-recommend?limit=8
  • 畅销书籍:http://localhost:8081/api/book/bestsellers?limit=10

期望返回

{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 1,
      "title": "西游记",
      "author": "(明) 吴承恩",
      "image": "https://picsum.photos/seed/xiyouji/200/300",
      ...
    }
  ]
}

方法2:使用curl测试

# 测试今日推荐
curl http://localhost:8081/api/book/today-recommend?limit=8

# 测试畅销书籍
curl http://localhost:8081/api/book/bestsellers?limit=10

步骤5:检查前端API配置

检查 books/utils/config.js

// 确保BASE_URL正确
const BASE_URL = 'http://localhost:8081/api'

步骤6:查看前端控制台日志

在微信开发者工具中:

  1. 打开 "调试器" -> "Console" 面板
  2. 刷新页面
  3. 查看日志输出:
    • 开始加载今日推荐...
    • 今日推荐API响应: {...}
    • 今日推荐数据加载成功,共 X 本
    • ❌ 或者错误信息

步骤7:查看网络请求

在微信开发者工具中:

  1. 打开 "调试器" -> "Network" 面板
  2. 刷新页面
  3. 查看请求:
    • GET /api/book/today-recommend?limit=8
    • GET /api/book/bestsellers?limit=10
  4. 检查响应:
    • 状态码:200 ✅
    • 响应数据:应该包含 code: 200data: [...]

🔧 常见问题及解决方案

问题1:数据库中没有数据 ⭐ 最常见

现象

  • API返回 code: 200, data: [](空数组)
  • 控制台显示"数据为空或格式不正确"

解决方案: 执行 book/src/main/resources/db/quick_insert_books.sql 文件

问题2:后端服务未启动

现象

  • Network面板显示请求失败
  • Console显示"网络请求失败,请检查网络连接"
  • 错误提示:"网络请求失败,请检查后端服务"

解决方案

cd book
mvn spring-boot:run

问题3:API地址配置错误

现象

  • Network面板显示404或网络错误
  • Console显示"网络请求失败"

解决方案: 检查 books/utils/config.js 中的 BASE_URL 是否正确:

const BASE_URL = 'http://localhost:8081/api'

问题4:数据库连接失败

现象

  • 后端启动失败
  • 控制台显示数据库连接错误

解决方案: 检查 book/src/main/resources/application.properties 中的数据库配置:

spring.datasource.url=jdbc:mysql://localhost:3306/books_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=你的数据库密码

问题5:书籍状态不是1(上架状态)

现象

  • 数据库中有数据,但API返回空数组
  • SQL查询 WHERE status = 1 返回空

解决方案

-- 更新所有书籍状态为1(上架)
UPDATE books SET status = 1 WHERE status IS NULL OR status != 1;

📝 快速修复流程

一键修复(推荐)

  1. 执行SQL脚本

    -- 在Navicat中执行
    source book/src/main/resources/db/quick_insert_books.sql
    
  2. 启动后端服务

    cd book
    mvn spring-boot:run
    
  3. 刷新前端页面

    • 在微信开发者工具中刷新首页
    • 查看控制台日志
    • 查看Network请求
  4. 验证结果

    • 今日推荐显示8本书 ✅
    • 畅销书籍显示10本书 ✅

✅ 验证清单

修复后,请确认:

  • 数据库中有书籍数据(至少18本,status=1)
  • 后端服务已启动(端口8081)
  • API接口可以访问(浏览器测试通过)
  • 前端API地址配置正确
  • 网络请求成功(Network面板显示200)
  • 控制台有成功日志("数据加载成功,共X本")
  • 前端页面显示书籍列表

🎯 预期结果

修复成功后,应该看到:

  1. 控制台日志

    开始加载今日推荐...
    今日推荐API响应: {code: 200, data: Array(8)}
    今日推荐数据加载成功,共 8 本
    开始加载畅销书籍...
    畅销书籍API响应: {code: 200, data: Array(10)}
    畅销书籍数据加载成功,共 10 本
    
  2. 前端页面

    • "今日推荐"显示8本书(网格布局)
    • "畅销书籍"显示10本书(列表布局)
  3. Network面板

    • 请求状态码:200 ✅
    • 响应数据包含书籍列表 ✅

📌 重要提示

  1. 必须先执行SQL脚本插入数据,否则API会返回空数组
  2. 确保后端服务已启动,否则前端无法获取数据
  3. 检查数据库连接配置,确保能连接到数据库
  4. 查看控制台日志,了解具体的错误信息
  5. 查看Network面板,检查API请求和响应

创建时间:2024年 最后更新:2024年