llm-chat/.qoder/quests/run-project-fix-errors.md

6.6 KiB

运行项目与错误修复设计方案

项目概述

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 并发运行前后端

项目启动流程设计

启动顺序架构

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 数据库文件不存在或权限问题

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 端口被占用

graph TD
    A[启动失败] --> B{检查端口占用}
    B -->|端口被占用| C[终止占用进程]
    B -->|端口正常| D[检查其他配置]
    C --> E[重新启动服务]
    D --> F[排查网络配置]

解决策略:

  1. 检测端口占用情况
  2. 提供端口配置选项
  3. 实现优雅的端口切换

LLM API 配置错误

错误模式:

  • API_KEY 未配置或无效
  • 网络连接问题
  • 请求频率限制

修复流程:

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

服务启动验证策略

后端健康检查

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. 路由导航功能

前后端通信验证

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: 验证代理设置

功能验证测试方案

核心功能测试架构

graph TD
    A[页面加载测试] --> B[创建新对话]
    B --> C[发送消息测试]
    C --> D[接收响应测试]
    D --> E[对话历史测试]
    E --> F[UI交互测试]

测试用例设计

测试项 验证内容 期望结果
页面访问 http://localhost:5173 页面正常加载
新建对话 点击新建对话按钮 创建空白对话界面
消息发送 输入测试消息并发送 消息显示在界面
API通信 后端接收并处理请求 返回预期响应
历史记录 查看对话历史 正确显示历史对话

错误监控与日志策略

日志架构设计

graph LR
    A[请求日志] --> D[Morgan中间件]
    B[错误日志] --> E[自定义ErrorHandler]
    C[应用日志] --> F[Console Logger]
    
    D --> G[请求统计]
    E --> H[错误追踪]
    F --> I[调试信息]

监控指标

  • 性能指标: 响应时间、内存使用、CPU占用
  • 错误指标: 错误率、异常类型、失败请求
  • 业务指标: API调用次数、用户会话数

部署前置条件检查

环境依赖验证

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调用失败 网络错误 检查配置和网络 修复配置或网络问题
前端白屏 页面不显示 检查控制台错误 修复组件或路由错误

调试工具配置

graph LR
    A[后端调试] --> B[nodemon + console.log]
    C[前端调试] --> D[Vue DevTools]
    E[网络调试] --> F[浏览器 Network 面板]
    G[数据库调试] --> H[SQLite 命令行工具]