Files
workdizhi/导入问题排查指南.md

4.8 KiB
Raw Blame History

导入数据问题排查指南

🔍 问题现象

导入数据后,在另一台电脑只能看到一条测试网址,说明导入的数据没有正确保存到服务器。

🔧 已实施的修复

1. 增强错误处理

  • 添加了详细的控制台日志
  • 保存失败时会显示具体错误信息
  • 导入成功后会显示导入的数据数量

2. 添加数据验证

  • 导入后会自动验证服务器上的数据
  • 显示导入的网址和分类数量
  • 保存失败时会抛出错误

3. 增强服务器日志

  • 服务器会记录每次保存请求的详细信息
  • 记录保存的网址和分类数量
  • 保存后会验证文件内容

📋 排查步骤

步骤 1: 检查浏览器控制台

  1. 打开网站:http://101.43.95.130:3006
  2. 按 F12 打开开发者工具
  3. 切换到 Console 标签
  4. 执行导入操作
  5. 查看控制台输出,应该看到:
    • 导入数据: {...}
    • 导入网址数量: X
    • 开始保存数据到服务器...
    • 服务器保存成功: {...}
    • 服务器上的数据: {...}

步骤 2: 检查网络请求

  1. 在开发者工具中切换到 Network 标签
  2. 执行导入操作
  3. 查找 POST 请求到 /api/urls
  4. 检查:
    • 请求状态码(应该是 200
    • 请求体(应该包含所有导入的数据)
    • 响应内容(应该显示成功)

步骤 3: 检查服务器日志

# 查看容器日志
docker logs -f workdizhi-web

# 执行导入操作,应该看到:
# - "收到保存请求: { urlsCount: X, categoriesCount: Y }"
# - "数据已保存,验证: { urlsCount: X, categoriesCount: Y }"

步骤 4: 检查数据文件

# 检查服务器上的数据文件
cat /home/renjianbo/devops/workdizhi/workdizhi/data/urls.json

# 检查容器内的数据文件
docker exec workdizhi-web cat /app/data/urls.json

# 通过 API 获取数据
curl http://localhost:3006/api/urls

🐛 常见问题

问题 1: 导入的数据格式不正确

症状: 控制台显示 "文件格式错误"

解决:

  • 确保 JSON 文件格式正确
  • 文件应包含 urlscategories 字段
  • 示例格式:
{
  "urls": [
    {"id": "1", "title": "网址1", "url": "https://example.com"}
  ],
  "categories": []
}

问题 2: 保存请求失败

症状: 控制台显示 "保存到服务器失败"

检查:

  1. 网络连接是否正常
  2. 服务器是否运行:docker ps | grep workdizhi
  3. API 是否可访问:curl http://localhost:3006/api/health

解决:

# 重启服务
cd /home/renjianbo/devops/workdizhi/workdizhi
docker-compose restart

问题 3: 数据保存但读取时为空

症状: 保存成功,但读取时只有默认数据

检查:

  1. 数据文件是否存在
  2. 文件内容是否正确
  3. 文件权限是否正确

解决:

# 检查文件
cat /home/renjianbo/devops/workdizhi/workdizhi/data/urls.json

# 修复权限(如果需要)
sudo chown -R renjianbo:renjianbo /home/renjianbo/devops/workdizhi/workdizhi/data/

问题 4: 导入后数据被覆盖

症状: 导入成功,但之后添加的数据覆盖了导入的数据

原因: 可能是 localStorage 中的旧数据覆盖了服务器数据

解决:

  1. 清除浏览器 localStorage
  2. 重新加载页面
  3. 数据会从服务器重新加载

🔍 调试命令

查看当前数据

# 服务器文件
cat /home/renjianbo/devops/workdizhi/workdizhi/data/urls.json

# API 获取
curl http://localhost:3006/api/urls | python -m json.tool

# 容器内文件
docker exec workdizhi-web cat /app/data/urls.json

测试保存功能

# 测试保存
curl -X POST http://localhost:3006/api/urls \
  -H "Content-Type: application/json" \
  -d '{
    "urls": [
      {"id": "1", "title": "测试1", "url": "https://test1.com"},
      {"id": "2", "title": "测试2", "url": "https://test2.com"}
    ],
    "categories": []
  }'

# 验证保存
curl http://localhost:3006/api/urls

查看日志

# 实时查看日志
docker logs -f workdizhi-web

# 查看最近 50 行
docker logs --tail 50 workdizhi-web

验证导入成功

导入数据后,执行以下验证:

  1. 浏览器控制台: 应该看到 "数据导入成功!已导入 X 个网址..."
  2. 服务器文件: cat /home/renjianbo/devops/workdizhi/workdizhi/data/urls.json 应该包含所有导入的数据
  3. API 获取: curl http://localhost:3006/api/urls 应该返回所有数据
  4. 重启测试: 重启容器后,数据应该还在

🎯 下一步

如果问题仍然存在,请:

  1. 打开浏览器开发者工具F12
  2. 切换到 Console 标签
  3. 执行导入操作
  4. 复制所有控制台输出
  5. 检查 Network 标签中的 POST 请求
  6. 查看请求和响应的详细信息

这些信息可以帮助进一步诊断问题。