202 lines
4.8 KiB
Markdown
202 lines
4.8 KiB
Markdown
# 导入数据问题排查指南
|
||
|
||
## 🔍 问题现象
|
||
|
||
导入数据后,在另一台电脑只能看到一条测试网址,说明导入的数据没有正确保存到服务器。
|
||
|
||
## 🔧 已实施的修复
|
||
|
||
### 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. 查看请求和响应的详细信息
|
||
|
||
这些信息可以帮助进一步诊断问题。
|
||
|