256 lines
6.6 KiB
Markdown
256 lines
6.6 KiB
Markdown
|
# 运行项目与错误修复设计方案
|
||
|
|
||
|
## 项目概述
|
||
|
|
||
|
LLM Chat Website 是一个基于 Node.js 后端和 Vue.js 前端的全栈聊天应用,使用 pnpm workspace 进行依赖管理。项目采用现代化技术栈,包含完整的聊天功能和大语言模型集成。
|
||
|
|
||
|
## 技术架构分析
|
||
|
|
||
|
### 后端架构 (Node.js + Express)
|
||
|
- **框架**: Express.js 4.18.2
|
||
|
- **数据库**: SQLite3 5.1.6
|
||
|
- **缓存**: LRU Cache 10.0.1
|
||
|
- **HTTP客户端**: Axios 1.6.2
|
||
|
- **开发工具**: Nodemon 3.0.2
|
||
|
- **端口**: 3000 (默认)
|
||
|
|
||
|
### 前端架构 (Vue 3)
|
||
|
- **框架**: Vue 3.3.8
|
||
|
- **构建工具**: Vite 5.0.0
|
||
|
- **UI框架**: Element Plus 2.4.4
|
||
|
- **状态管理**: Pinia 2.1.7
|
||
|
- **路由**: Vue Router 4.2.5
|
||
|
- **端口**: 5173 (默认)
|
||
|
|
||
|
### 依赖管理
|
||
|
- **包管理器**: pnpm (workspace 模式)
|
||
|
- **配置文件**: pnpm-workspace.yaml
|
||
|
- **根目录脚本**: concurrently 并发运行前后端
|
||
|
|
||
|
## 项目启动流程设计
|
||
|
|
||
|
### 启动顺序架构
|
||
|
|
||
|
```mermaid
|
||
|
graph TD
|
||
|
A[检查 pnpm 安装] --> B[验证 workspace 配置]
|
||
|
B --> C[检查依赖安装状态]
|
||
|
C --> D[启动后端服务]
|
||
|
D --> E[初始化数据库]
|
||
|
E --> F[启动前端服务]
|
||
|
F --> G[验证服务通信]
|
||
|
G --> H[功能验证测试]
|
||
|
```
|
||
|
|
||
|
### 环境变量配置架构
|
||
|
|
||
|
| 变量名 | 默认值 | 说明 |
|
||
|
|--------|--------|------|
|
||
|
| PORT | 3000 | 后端服务端口 |
|
||
|
| NODE_ENV | development | 运行环境 |
|
||
|
| LLM_API_KEY | - | 大语言模型API密钥 |
|
||
|
| LLM_API_BASE_URL | https://api.openai.com/v1 | API基础地址 |
|
||
|
| LLM_MODEL | gpt-3.5-turbo | 使用的模型 |
|
||
|
| CORS_ORIGIN | http://localhost:5173 | 跨域设置 |
|
||
|
|
||
|
## 潜在错误分析与解决方案
|
||
|
|
||
|
### 数据库初始化错误
|
||
|
|
||
|
**错误场景**: SQLite 数据库文件不存在或权限问题
|
||
|
```mermaid
|
||
|
flowchart LR
|
||
|
A[数据库连接失败] --> B{检查文件权限}
|
||
|
B -->|权限正常| C[创建数据库目录]
|
||
|
B -->|权限异常| D[修复文件权限]
|
||
|
C --> E[执行 schema.sql]
|
||
|
D --> E
|
||
|
E --> F[验证表结构]
|
||
|
```
|
||
|
|
||
|
**解决策略**:
|
||
|
1. 确保 backend/database 目录存在且可写
|
||
|
2. 自动创建数据库文件
|
||
|
3. 执行 schema.sql 初始化表结构
|
||
|
4. 验证示例数据插入
|
||
|
|
||
|
### 端口冲突错误
|
||
|
|
||
|
**错误场景**: 3000 或 5173 端口被占用
|
||
|
```mermaid
|
||
|
graph TD
|
||
|
A[启动失败] --> B{检查端口占用}
|
||
|
B -->|端口被占用| C[终止占用进程]
|
||
|
B -->|端口正常| D[检查其他配置]
|
||
|
C --> E[重新启动服务]
|
||
|
D --> F[排查网络配置]
|
||
|
```
|
||
|
|
||
|
**解决策略**:
|
||
|
1. 检测端口占用情况
|
||
|
2. 提供端口配置选项
|
||
|
3. 实现优雅的端口切换
|
||
|
|
||
|
### LLM API 配置错误
|
||
|
|
||
|
**错误模式**:
|
||
|
- API_KEY 未配置或无效
|
||
|
- 网络连接问题
|
||
|
- 请求频率限制
|
||
|
|
||
|
**修复流程**:
|
||
|
```mermaid
|
||
|
sequenceDiagram
|
||
|
participant App as 应用
|
||
|
participant Config as 配置验证
|
||
|
participant LLM as LLM服务
|
||
|
|
||
|
App->>Config: 验证API配置
|
||
|
Config->>Config: 检查必要环境变量
|
||
|
alt 配置缺失
|
||
|
Config->>App: 返回警告信息
|
||
|
App->>App: 使用默认配置
|
||
|
else 配置完整
|
||
|
Config->>LLM: 测试连接
|
||
|
LLM->>Config: 返回连接状态
|
||
|
end
|
||
|
```
|
||
|
|
||
|
### 前端构建错误
|
||
|
|
||
|
**常见问题**:
|
||
|
1. 依赖版本冲突
|
||
|
2. 样式预处理器错误
|
||
|
3. TypeScript 类型检查错误
|
||
|
|
||
|
**解决方案架构**:
|
||
|
- 依赖冲突: 使用 pnpm 的严格依赖解析
|
||
|
- 样式错误: 验证 SCSS 变量文件路径
|
||
|
- 类型错误: 配置 unplugin-auto-import
|
||
|
|
||
|
## 服务启动验证策略
|
||
|
|
||
|
### 后端健康检查
|
||
|
|
||
|
```mermaid
|
||
|
graph LR
|
||
|
A[GET /] --> B{响应状态}
|
||
|
B -->|200| C[服务正常]
|
||
|
B -->|非200| D[服务异常]
|
||
|
|
||
|
E[GET /api] --> F{API状态}
|
||
|
F -->|可访问| G[API正常]
|
||
|
F -->|不可访问| H[API异常]
|
||
|
```
|
||
|
|
||
|
### 前端资源加载验证
|
||
|
|
||
|
**验证点**:
|
||
|
1. 静态资源加载 (CSS, JS)
|
||
|
2. Vue 应用挂载成功
|
||
|
3. Element Plus 组件正常渲染
|
||
|
4. 路由导航功能
|
||
|
|
||
|
### 前后端通信验证
|
||
|
|
||
|
```mermaid
|
||
|
sequenceDiagram
|
||
|
participant F as Frontend
|
||
|
participant P as Proxy
|
||
|
participant B as Backend
|
||
|
|
||
|
F->>P: 发送 /api 请求
|
||
|
P->>B: 转发到 localhost:3000
|
||
|
B->>P: 返回响应
|
||
|
P->>F: 返回结果
|
||
|
|
||
|
Note over F,B: 验证 CORS 配置
|
||
|
Note over F,B: 验证代理设置
|
||
|
```
|
||
|
|
||
|
## 功能验证测试方案
|
||
|
|
||
|
### 核心功能测试架构
|
||
|
|
||
|
```mermaid
|
||
|
graph TD
|
||
|
A[页面加载测试] --> B[创建新对话]
|
||
|
B --> C[发送消息测试]
|
||
|
C --> D[接收响应测试]
|
||
|
D --> E[对话历史测试]
|
||
|
E --> F[UI交互测试]
|
||
|
```
|
||
|
|
||
|
### 测试用例设计
|
||
|
|
||
|
| 测试项 | 验证内容 | 期望结果 |
|
||
|
|--------|----------|----------|
|
||
|
| 页面访问 | http://localhost:5173 | 页面正常加载 |
|
||
|
| 新建对话 | 点击新建对话按钮 | 创建空白对话界面 |
|
||
|
| 消息发送 | 输入测试消息并发送 | 消息显示在界面 |
|
||
|
| API通信 | 后端接收并处理请求 | 返回预期响应 |
|
||
|
| 历史记录 | 查看对话历史 | 正确显示历史对话 |
|
||
|
|
||
|
## 错误监控与日志策略
|
||
|
|
||
|
### 日志架构设计
|
||
|
|
||
|
```mermaid
|
||
|
graph LR
|
||
|
A[请求日志] --> D[Morgan中间件]
|
||
|
B[错误日志] --> E[自定义ErrorHandler]
|
||
|
C[应用日志] --> F[Console Logger]
|
||
|
|
||
|
D --> G[请求统计]
|
||
|
E --> H[错误追踪]
|
||
|
F --> I[调试信息]
|
||
|
```
|
||
|
|
||
|
### 监控指标
|
||
|
|
||
|
- **性能指标**: 响应时间、内存使用、CPU占用
|
||
|
- **错误指标**: 错误率、异常类型、失败请求
|
||
|
- **业务指标**: API调用次数、用户会话数
|
||
|
|
||
|
## 部署前置条件检查
|
||
|
|
||
|
### 环境依赖验证
|
||
|
|
||
|
```mermaid
|
||
|
flowchart TD
|
||
|
A[Node.js 版本] -->|>=16.0.0| B[pnpm 安装]
|
||
|
B --> C[workspace 配置]
|
||
|
C --> D[依赖安装状态]
|
||
|
D --> E[环境变量配置]
|
||
|
E --> F[网络连接测试]
|
||
|
F --> G[启动准备就绪]
|
||
|
```
|
||
|
|
||
|
### 配置文件验证
|
||
|
|
||
|
1. **package.json**: 验证脚本配置和依赖版本
|
||
|
2. **pnpm-workspace.yaml**: 确认 workspace 配置格式
|
||
|
3. **vite.config.js**: 验证构建和代理配置
|
||
|
4. **.env**: 检查必要环境变量
|
||
|
|
||
|
## 故障排除指南
|
||
|
|
||
|
### 常见问题快速诊断
|
||
|
|
||
|
| 问题类型 | 症状 | 诊断步骤 | 解决方案 |
|
||
|
|----------|------|----------|----------|
|
||
|
| 依赖问题 | 模块找不到 | 检查 node_modules | 重新安装依赖 |
|
||
|
| 端口冲突 | EADDRINUSE | 检查端口占用 | 更换端口或终止进程 |
|
||
|
| 数据库错误 | 连接失败 | 检查文件权限 | 重新初始化数据库 |
|
||
|
| API调用失败 | 网络错误 | 检查配置和网络 | 修复配置或网络问题 |
|
||
|
| 前端白屏 | 页面不显示 | 检查控制台错误 | 修复组件或路由错误 |
|
||
|
|
||
|
### 调试工具配置
|
||
|
|
||
|
```mermaid
|
||
|
graph LR
|
||
|
A[后端调试] --> B[nodemon + console.log]
|
||
|
C[前端调试] --> D[Vue DevTools]
|
||
|
E[网络调试] --> F[浏览器 Network 面板]
|
||
|
G[数据库调试] --> H[SQLite 命令行工具]
|
||
|
```
|