全栈 AI 对话应用完善方案现有架构分析后端 (master-nest-demo)NestJS Prisma MySQL (两个数据库: ai_multimodal_database, nest_database)已有 Chat 和 AiMultimodalChat 接口调用 Ollama 本地模型 (qwen3.5:9b)Prisma schema 有 Conversation/Message 模型 (AI库) 和 User 模型 (Nest库)无认证系统、无错误处理、Message 保存被注释掉、CORS 配置简陋所有控制器直接注册在 AppModule无模块化前端 (master-react-demo)Umi Max Redux Toolkit Ant Design ant-design/xChat 页面有基础布局 (Conversations Sender)但无消息展示user slice 仅有 setUser/clearUser无认证逻辑硬编码 API 地址无请求拦截器/token 管理无登录注册页面、无路由守卫Task 1: 后端 - 安装依赖包安装认证和验证相关依赖:pnpm add nestjs/jwt nestjs/passport passport passport-jwt bcryptjs class-validator class-transformer pnpm add -D types/passport-jwt types/bcryptjsTask 2: 后端 - 更新 Prisma Schema 并生成迁移schema-nest.prisma- 扩展 User 模型增加认证相关字段:model User { id Int id default(autoincrement()) uid String default(uuid()) unique email String? unique phone String? unique name String password String // 新增: 密码哈希 avatar String? // 新增: 头像URL role String default(user) // 新增: 角色 status Int default(1) // 新增: 状态 1-正常 0-禁用 createTime DateTime default(now()) updateTime DateTime updatedAt }schema.prisma- 改进 Conversation/Message 模型:model Conversation { id Int id default(autoincrement()) uuid String default(uuid()) unique userUid String title String? model String createdAt DateTime default(now()) updatedAt DateTime updatedAt messages Message[] } model Message { id Int id default(autoincrement()) conversationId Int conversation Conversation relation(fields: [conversationId], references: [id], onDelete: Cascade) role String // user / assistant / system content String createdAt DateTime default(now()) }运行pnpm update:nest和pnpm update:ai生成迁移。Task 3: 后端 - 创建 Auth 模块 (认证系统)文件结构:src/api/auth/ ├── auth.module.ts ├── auth.controller.ts ├── auth.service.ts ├── jwt.strategy.ts ├── jwt-auth.guard.ts └── dto/ ├── register.dto.ts └── login.dto.ts核心功能:POST /auth/register- 用户注册 (密码 bcrypt 哈希存储)POST /auth/login- 用户登录 (返回 JWT accessToken 用户信息)GET /auth/profile- 获取当前用户信息 (需 JWT 验证)JWT Strategy 基于 passport-jwt从 Authorization header 提取 tokenJwtAuthGuard 用于保护需要认证的路由auth.service.ts 关键逻辑:register: 校验邮箱/手机唯一性 → bcrypt.hash 加密 → 创建用户login: 查找用户 → bcrypt.compare 校验密码 → jwt.sign 生成 tokenvalidateUser: JWT 策略中调用通过 uid 查找用户Task 4: 后端 - 创建 User 模块文件结构:src/api/user/ ├── user.module.ts ├── user.controller.ts └── user.service.ts核心功能:GET /user/profile- 获取用户信息PUT /user/profile- 更新用户信息使用 nestPrisma (nest_database) 操作 User 表Task 5: 后端 - 重构 Chat 模块改进点:将 Chat 和 AiMultimodalChat 合并重构为统一的 Chat 模块添加 NestJS Module 封装实现完整的消息保存逻辑 (取消注释 Message 创建)添加错误处理 try-catch HttpException新增接口:POST /chat/send- 发送消息 (POST 替代 GET支持更长内容)GET /chat/conversations- 获取用户对话列表GET /chat/conversations/:uuid/messages- 获取对话消息历史POST /chat/conversations- 创建新对话DELETE /chat/conversations/:uuid- 删除对话chat.service.ts 改进:错误处理: 捕获 Ollama API 调用异常返回友好错误信息完整消息流: 用户消息 → 保存到DB → 调用AI → 保存AI回复 → 返回对话管理: 创建/获取/删除对话关联用户Task 6: 后端 - 修复 CORS 和全局配置main.ts 改进:app.enableCors({origin:[http://localhost:1113,http://localhost:3000],methods:GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS,credentials:true,});app.useGlobalPipes(newValidationPipe({transform:true,whitelist:true}));添加全局异常过滤器src/filters/http-exception.filter.ts:统一错误响应格式 { code, message, data }Task 7: 后端 - 更新 AppModule 整合所有模块将原来的扁平控制器注册改为模块化导入:imports:[ServeStaticModule.forRoot(...),AuthModule,UserModule,ChatModule,// 保留其他模块]删除直接注册的 controllers/providers。Task 8: 前端 - 创建认证相关服务和状态管理新建文件:src/services/auth.ts- 认证 API 调用 (login, register, getProfile)src/utils/request.ts- 基于 fetch 的请求封装 (自动添加 token、错误处理)src/store/user/index.ts- 更新 user slice (增加 token, isAuthenticated, loading 状态)src/store/user/asyncRequest.ts- 用户相关异步请求request.ts 核心逻辑:从 localStorage 读取 token请求头自动附带 Authorization: Bearer {token}401 响应自动跳转登录页统一错误处理Task 9: 前端 - 创建登录和注册页面新建文件:src/pages/Login/index.tsx- 登录页面src/pages/Register/index.tsx- 注册页面登录页面:Ant Design Form Input 组件支持邮箱/手机号 密码登录登录成功后存储 token 到 localStorage跳转 Chat 页面包含跳转到注册页面的链接注册页面:表单字段: 用户名、邮箱、手机号、密码、确认密码前端表单验证注册成功后自动登录或跳转登录页Task 10: 前端 - 更新路由和权限配置.umirc.ts 新增路由:routes:[{path:/login,component:./Login,layout:false},{path:/register,component:./Register,layout:false},{path:/,redirect:/chat},{path:/chat,component:./Chat},]access.ts 更新:canSeeAdmin 基于用户登录状态判断未登录用户重定向到登录页app.tsx 更新:getInitialState 中检查 localStorage token获取用户信息实现路由守卫逻辑Task 11: 前端 - 重构 Chat 页面Chat/index.tsx 改进:左侧对话列表: 点击切换对话显示对话标题新增/删除对话右侧消息区域: 展示用户和AI的对话气泡 (用 ant-design/x 的 Bubble 组件)底部输入框: 优化 Sender 组件支持 Enter 发送、ShiftEnter 换行加载状态: AI 回复时显示打字效果/loading 指示器错误提示: 网络错误、API 错误友好提示Chat 状态管理改进:chat slice 增加: currentConversation (当前选中对话), messages (当前对话消息列表)新增异步 action: fetchMessages (加载对话消息), createConversation, deleteConversationTask 12: 前端 - 优化 UI/UX使用 Ant Design 主题定制对话列表添加搜索/筛选消息气泡区分用户/AI样式空状态引导 (无对话时的欢迎界面)响应式布局适配Task 13: 更新 .env 配置后端 .env 新增:JWT_SECRETyour-secret-key-change-in-production JWT_EXPIRES_IN7d OLLAMA_BASE_URLhttp://localhost:11434前端 .env.local 新增:API_BASE_URLhttp://localhost:3000实施顺序后端依赖安装 → Schema 更新 → Auth 模块 → User 模块 → Chat 重构 → CORS/全局配置 → AppModule 整合前端请求封装 → 认证服务 → 登录/注册页面 → 路由权限 → Chat 重构 → UI 优化前后端联调测试
企业数字化 ERP 产品动态
相关推荐
AI小麦智能晾晒机器人 Qt信创完整项目 # AI小麦智能晾晒机器人 Qt信创完整项目 ## 项目简介 **项目名称**:AI小麦全自动智能晾晒机器人控制系统(信创国产适配) **技术栈**:Qt5.15、C++、多线程串口、AI小麦分级晾晒模糊算法、SQLite本地数据库、QtChart实时曲线,完美兼容**统信UOS、银河麒麟**飞腾/鲲鹏ARM、兆… · 2026/11/5 1:35:33
CAN总线调试工具 # CAN总线调试工具 ## 项目基础信息 - 项目名称:CAN总线调试工具 - 技术栈:Qt Widgets + 原生CAN总线接口 + 数据解析 + 报文收发 + 过滤器管理 - 运行平台:统信UOS、银河麒麟(X86/ARM 全兼容,国产信创系统适配) - 应用场景:面向工业CAN总线设备(CAN仪表、车载终端、工… · 2026/11/5 1:35:33
NotchPrompter隐藏录屏原理详解:NSWindow的sharingType如何让提词器“隐身“ 【免费下载链接】NotchPrompter Super simple-to-use, always-on-top floating text prompter for macOS. Perfect for quick videos or keeping important text visible while you work. 项目地址: https://gitcode.com/gh_mirrors/no/NotchPrompter 点击查看 免费… · 2026/11/5 1:34:33
TED精读如何训练高阶英语思维与认知能力 1. 项目概述:这不是一节普通英语课,而是一次认知升级的实操训练“跟TED演讲学英文:How AI can save our humanity by Kai-Fu Lee”——这个标题乍看是语言学习类内容,但真正懂行的人一眼就能看出,它根本不是在教“how … · 2026/11/5 4:39:54
PostgreSQL INSERT操作全面指南与性能优化 1. PostgreSQL INSERT 操作深度解析PostgreSQL 作为一款功能强大的开源关系型数据库,其 INSERT 语句提供了远超基础数据插入的丰富功能。在实际开发中,合理运用这些特性可以显著提升数据操作效率和可靠性。1.1 基础语法与核心组件INSERT 语句的基础结构包… · 2026/11/5 4:39:54
Python在线考试系统开发:微服务架构与大数据分析实践 1. 项目概述与设计背景在线考试系统作为教育信息化的重要载体,正在经历从传统纸质考试向智能化评估的转型。我们团队基于Python技术栈开发的这套系统,核心目标是解决三个行业痛点:一是人工阅卷效率低下,二是考试过程监管困难&… · 2026/11/5 4:39:54
MySQL执行机制解析与性能优化实战 1. 项目概述MySQL作为最流行的开源关系型数据库之一,其内部执行机制一直是开发者们关注的焦点。在实际工作中,我们经常遇到这样的困惑:为什么这条SQL执行这么慢?索引为什么没生效?连接池配置多少合适?要真正… · 2026/11/5 4:39:54
小波阈值去噪五种改进变体:原理、MATLAB实现与避坑指南 简介:面向信号处理初学者与工程实践者的MATLAB小波阈值去噪工具包,聚焦软阈值、硬阈值及五种改进阈值方法的快速实现。作者在wden、thselect与wthresh三个函数基础上进行改造,并进一步封装为filterWaveletTh函数,延续专栏一贯的代… · 2026/11/5 4:39:54
从NRZ到PAM4:SerDes高速链路调制选型、均衡与眼图调试 高速串行链路这个圈子,做得久了你会发现一个很有意思的现象:真正决定一个系统能不能跑通的,往往不是那几百页的协议栈,而是最底层那一对差分线上的信号到底长什么样。SerDes 系统里 NRZ 和 PAM4 这两种调制方式的取舍,… · 2026/11/5 4:38:47
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38