docs: 新增问题记录文档
- 新增 docs/ISSUES.md 问题记录文档 - 记录问题 #001:新建机器人报 Failed to fetch 错误 - 包含问题现象、原因分析、解决方案 - 提供问题记录模板
This commit is contained in:
166
docs/ISSUES.md
Normal file
166
docs/ISSUES.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# 问题记录文档
|
||||
|
||||
> 记录智队中枢项目开发过程中发现的问题、原因分析和解决方案
|
||||
|
||||
---
|
||||
|
||||
## 问题 #001:新建机器人报 "Failed to fetch" 错误
|
||||
|
||||
### 问题现象
|
||||
|
||||
**发现时间**:2026-03-15
|
||||
|
||||
**发现版本**:v0.9.8
|
||||
|
||||
**问题描述**:
|
||||
用户在智队中枢 Web 页面点击「新建机器人」按钮,填写表单提交后,前端报错:
|
||||
```
|
||||
Failed to fetch
|
||||
```
|
||||
|
||||
**影响范围**:
|
||||
- 新建机器人功能
|
||||
- 所有 `/api/bots` 相关请求
|
||||
|
||||
---
|
||||
|
||||
### 问题原因
|
||||
|
||||
**根本原因**:Flask 路由尾部斜杠不一致导致 301 重定向
|
||||
|
||||
**详细分析**:
|
||||
|
||||
| 组件 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| Flask 蓝图注册 | `url_prefix='/api/bots'` | 无尾部斜杠 |
|
||||
| Flask 路由定义 | `@bots_bp.route('/')` | 有前导斜杠 |
|
||||
| 实际完整路径 | `/api/bots/` | **有尾部斜杠** |
|
||||
| 前端请求路径 | `fetch('/api/bots')` | **无尾部斜杠** |
|
||||
|
||||
**错误流程**:
|
||||
|
||||
```
|
||||
1. 前端发送 POST /api/bots(无尾部斜杠)
|
||||
↓
|
||||
2. Flask 返回 301 重定向 → /api/bots/(有尾部斜杠)
|
||||
↓
|
||||
3. POST 请求被重定向时:
|
||||
- 某些浏览器会将 POST 改为 GET
|
||||
- fetch API 无法正确处理重定向
|
||||
↓
|
||||
4. 前端报错 "Failed to fetch"
|
||||
```
|
||||
|
||||
**验证结果**:
|
||||
|
||||
```bash
|
||||
# 不带尾部斜杠 → 301 重定向
|
||||
curl -X POST http://localhost:9000/api/bots
|
||||
# 返回: Redirecting to /api/bots/
|
||||
|
||||
# 带尾部斜杠 → 正常响应
|
||||
curl -X POST http://localhost:9000/api/bots/
|
||||
# 返回: {"msg": "Not enough segments"} # 正常的 JWT 错误
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 解决方案
|
||||
|
||||
**方案一:前端修改(推荐)**
|
||||
|
||||
修改 `frontend/src/components/chat/CreateBotModal.vue`:
|
||||
|
||||
```typescript
|
||||
// 修改前
|
||||
const response = await fetch('/api/bots', {
|
||||
|
||||
// 修改后
|
||||
const response = await fetch('/api/bots/', {
|
||||
```
|
||||
|
||||
**方案二:后端修改**
|
||||
|
||||
修改 `app/routes/bots.py`:
|
||||
|
||||
```python
|
||||
# 修改前
|
||||
@bots_bp.route('/', methods=['POST'])
|
||||
|
||||
# 修改后
|
||||
@bots_bp.route('', methods=['POST'])
|
||||
```
|
||||
|
||||
**方案三:Flask 配置(全局生效)**
|
||||
|
||||
在 `app/__init__.py` 中添加:
|
||||
|
||||
```python
|
||||
app.url_map.strict_slashes = False
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 解决状态
|
||||
|
||||
| 状态 | 日期 |
|
||||
|------|------|
|
||||
| ⏳ 待修复 | - |
|
||||
|
||||
---
|
||||
|
||||
## 问题记录模板
|
||||
|
||||
```markdown
|
||||
## 问题 #XXX:[问题标题]
|
||||
|
||||
### 问题现象
|
||||
|
||||
**发现时间**:YYYY-MM-DD
|
||||
|
||||
**发现版本**:vX.X.X
|
||||
|
||||
**问题描述**:
|
||||
[描述问题现象]
|
||||
|
||||
**影响范围**:
|
||||
- [影响的功能模块]
|
||||
|
||||
---
|
||||
|
||||
### 问题原因
|
||||
|
||||
**根本原因**:[一句话概括]
|
||||
|
||||
**详细分析**:
|
||||
[详细的原因分析]
|
||||
|
||||
---
|
||||
|
||||
### 解决方案
|
||||
|
||||
**方案**:[解决方案描述]
|
||||
|
||||
**代码修改**:
|
||||
```语言
|
||||
// 修改前
|
||||
[代码]
|
||||
|
||||
// 修改后
|
||||
[代码]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 解决状态
|
||||
|
||||
| 状态 | 日期 |
|
||||
|------|------|
|
||||
| ✅ 已修复 | YYYY-MM-DD |
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
_文档创建时间:2026-03-15 | 维护者:小白 🐶_
|
||||
Reference in New Issue
Block a user