# 导入数据问题排查指南 ## 🔍 问题现象 导入数据后,在另一台电脑只能看到一条测试网址,说明导入的数据没有正确保存到服务器。 ## 🔧 已实施的修复 ### 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: 检查服务器日志 ```bash # 查看容器日志 docker logs -f workdizhi-web # 执行导入操作,应该看到: # - "收到保存请求: { urlsCount: X, categoriesCount: Y }" # - "数据已保存,验证: { urlsCount: X, categoriesCount: Y }" ``` ### 步骤 4: 检查数据文件 ```bash # 检查服务器上的数据文件 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 文件格式正确 - 文件应包含 `urls` 和 `categories` 字段 - 示例格式: ```json { "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` **解决**: ```bash # 重启服务 cd /home/renjianbo/devops/workdizhi/workdizhi docker-compose restart ``` ### 问题 3: 数据保存但读取时为空 **症状**: 保存成功,但读取时只有默认数据 **检查**: 1. 数据文件是否存在 2. 文件内容是否正确 3. 文件权限是否正确 **解决**: ```bash # 检查文件 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. 数据会从服务器重新加载 ## 🔍 调试命令 ### 查看当前数据 ```bash # 服务器文件 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 ``` ### 测试保存功能 ```bash # 测试保存 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 ``` ### 查看日志 ```bash # 实时查看日志 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. 查看请求和响应的详细信息 这些信息可以帮助进一步诊断问题。