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

202 lines
4.8 KiB
Markdown
Raw Normal View 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: 检查服务器日志
```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. 查看请求和响应的详细信息
这些信息可以帮助进一步诊断问题。