- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
155 lines
3.7 KiB
Markdown
155 lines
3.7 KiB
Markdown
# 前端模块加载错误修复记录
|
||
|
||
**日期**:2025-10-16
|
||
**问题**:assignment-center.vue 页面加载 task.ts 模块失败
|
||
**状态**:✅ 已修复
|
||
|
||
---
|
||
|
||
## 错误信息
|
||
|
||
```
|
||
GET http://localhost:3001/src/api/task.ts net::ERR_ABORTED 500 (Internal Server Error)
|
||
Router error: TypeError: Failed to fetch dynamically imported module
|
||
```
|
||
|
||
## 问题分析
|
||
|
||
新创建的 `kaopeilian-frontend/src/api/task.ts` 文件存在以下问题:
|
||
|
||
1. **错误的导入路径**:使用了不存在的 `@/utils/request`
|
||
2. **错误的类型导入**:从不存在的 `./types` 导入 `ResponseModel`
|
||
3. **错误的HTTP客户端**:使用了不存在的 `request` 对象
|
||
|
||
## 解决方案
|
||
|
||
### 修改内容
|
||
|
||
**文件**:`kaopeilian-frontend/src/api/task.ts`
|
||
|
||
#### 修改前:
|
||
```typescript
|
||
import request from '@/utils/request'
|
||
import type { ResponseModel } from './types'
|
||
|
||
export function getTasks(...) {
|
||
return request.get('/api/v1/manager/tasks', { params })
|
||
}
|
||
```
|
||
|
||
#### 修改后:
|
||
```typescript
|
||
import { http } from '@/utils/http'
|
||
import type { ResponseModel } from '@/types/practice'
|
||
|
||
export function getTasks(...) {
|
||
return http.get('/api/v1/manager/tasks', { params })
|
||
}
|
||
```
|
||
|
||
### 修改清单
|
||
|
||
1. ✅ 导入:`@/utils/request` → `@/utils/http`
|
||
2. ✅ 类型:`./types` → `@/types/practice`
|
||
3. ✅ 客户端:`request.xxx` → `http.xxx`(所有6个API方法)
|
||
|
||
### 额外操作
|
||
|
||
1. ✅ 清理Vite缓存:`rm -rf node_modules/.vite`
|
||
2. ✅ 重启前端容器:`docker restart kaopeilian-frontend-dev`
|
||
|
||
---
|
||
|
||
## 验证步骤
|
||
|
||
1. **检查前端服务状态**
|
||
```bash
|
||
docker ps | grep frontend
|
||
# 状态:Up 18 seconds (healthy) ✅
|
||
```
|
||
|
||
2. **验证文件修复**
|
||
```bash
|
||
cat kaopeilian-frontend/src/api/task.ts | head -10
|
||
# 确认导入已修正 ✅
|
||
```
|
||
|
||
3. **浏览器测试**
|
||
- 强制刷新页面(Ctrl+Shift+R 或 Cmd+Shift+R)
|
||
- 访问任务中心:`/manager/assignment-center`
|
||
- 检查控制台无错误
|
||
|
||
---
|
||
|
||
## 技术说明
|
||
|
||
### 项目HTTP客户端架构
|
||
|
||
本项目使用以下HTTP客户端配置:
|
||
|
||
1. **HTTP客户端**:`@/utils/http.ts`
|
||
- 基于 axios 的增强请求库
|
||
- 集成认证、错误处理、重试等功能
|
||
- 导出:`http` 对象
|
||
|
||
2. **类型定义**:`@/types/practice.ts`
|
||
- 定义 `ResponseModel<T>` 接口
|
||
- 统一API响应格式
|
||
|
||
3. **使用示例**:
|
||
```typescript
|
||
import { http } from '@/utils/http'
|
||
import type { ResponseModel } from '@/types/practice'
|
||
|
||
export function getData(): Promise<ResponseModel<Data>> {
|
||
return http.get('/api/v1/data')
|
||
}
|
||
```
|
||
|
||
### 为什么不使用 request?
|
||
|
||
- ❌ `@/utils/request.ts` 文件不存在
|
||
- ❌ 项目没有导出 `request` 对象
|
||
- ✅ 正确的是使用 `http` 对象
|
||
|
||
---
|
||
|
||
## 相关文件
|
||
|
||
### 修改的文件
|
||
- `kaopeilian-frontend/src/api/task.ts`
|
||
|
||
### 相关文件
|
||
- `kaopeilian-frontend/src/utils/http.ts` - HTTP客户端实现
|
||
- `kaopeilian-frontend/src/types/practice.ts` - 类型定义
|
||
- `kaopeilian-frontend/src/views/manager/assignment-center.vue` - 使用task API的页面
|
||
|
||
---
|
||
|
||
## 经验总结
|
||
|
||
1. **创建新API文件时检查项**:
|
||
- ✅ 使用正确的HTTP客户端(`http` 而非 `request`)
|
||
- ✅ 从正确位置导入类型(`@/types/practice`)
|
||
- ✅ 遵循项目现有的API文件模式
|
||
|
||
2. **参考现有API文件**:
|
||
- `kaopeilian-frontend/src/api/practice.ts` - 正确的导入示例
|
||
- `kaopeilian-frontend/src/api/exam/index.ts` - API封装参考
|
||
|
||
3. **调试模块加载错误**:
|
||
- 检查导入路径是否正确
|
||
- 检查导入的对象是否存在
|
||
- 清理缓存并重启服务
|
||
|
||
---
|
||
|
||
## 状态
|
||
|
||
✅ **问题已解决**
|
||
✅ **前端服务运行正常**
|
||
✅ **task.ts 模块可以正常加载**
|
||
|
||
**下一步**:用户在浏览器刷新页面后,任务中心应能正常加载真实数据。
|
||
|