ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

校园二手交易平台毕业设计:微信小程序+Node.js+MySQL全栈开发指南

校园二手交易平台毕业设计:微信小程序+Node.js+MySQL全栈开发指南 简介这是一套面向计算机专业本科生的校园二手交易平台微信小程序毕业设计实战资源专为毕设开发、课程设计及项目实训打造解决学生缺乏完整可运行电商类小程序案例的痛点。资源包含789个文件涵盖287个JS逻辑层代码、29个WXML视图结构、30个WXSS样式文件、80个Java后端接口、1个SQL数据库脚本及配套说明文档等完整呈现前后端协同开发流程压缩包仅8.48MB轻量易部署。已有263人学习下载项目经严格调试支持一键导入开发者工具运行附带清晰项目说明与模块划分覆盖用户认证、商品发布、分类浏览、在线沟通、订单管理等核心功能适合作为高分毕设直接提交或二次开发学习范本。1. 项目概述与核心价值最近几年我身边不少计算机相关专业的学弟学妹在准备毕业设计时都倾向于选择“校园二手交易平台”这个方向尤其是基于微信小程序的实现。这确实是个聪明的选择。它不像电商系统那么庞大复杂又比一个简单的博客或管理系统更能体现你的综合能力——前端、后端、数据库、产品逻辑、用户体验一个项目全都能练到。更重要的是它解决的是一个真实存在的痛点每年毕业季大量教材、电器、生活用品被当作废品处理而新生入学又需要重新购买信息不对称造成了巨大的浪费。一个便捷、可信、基于熟人社交关系链的校内二手交易平台天然具有需求土壤。这个毕业设计项目的核心就是利用微信小程序这个国民级应用入口构建一个服务于特定校园社区的轻量级C2C交易系统。它不仅仅是完成一个“增删改查”的作业更是对移动开发生态、前后端分离架构、数据库设计以及产品思维的一次完整实践。你将从零开始设计商品发布、浏览、搜索、沟通、交易或交易意向达成的完整闭环并深入思考如何利用小程序的能力如扫码、定位、客服消息、订阅通知来优化体验。最终产出的不仅仅是一份论文和答辩PPT更是一个可以实际运行、甚至有机会在校园内小范围推广验证的作品这对你求职时的项目经验积累至关重要。2. 项目整体架构与技术选型解析做一个校园二手交易平台技术栈的选型直接决定了开发难度、学习成本和项目的可扩展性。下面这套组合是我经过多个类似项目验证后认为最适合毕业设计场景的“黄金搭配”。2.1 前端微信小程序原生开发为什么不用uniapp或taro等多端框架对于毕业设计而言微信小程序原生开发是最直接、最稳妥的选择。首先它学习曲线相对平缓官方文档详尽社区资源丰富遇到任何问题几乎都能找到解决方案。其次毕业设计的评审老师通常更认可你对原生技术的掌握这能体现你的基础能力。最后小程序云开发虽然方便但为了更透彻地理解前后端交互和数据库操作我建议将前端与后端分离。技术要点页面结构使用 WXML WXSS JS JSON 的标准结构。重点掌握flex布局这是小程序页面布局的基石。组件化将商品卡片、搜索栏、底部导航栏等复用性高的部分封装成自定义组件提高代码可维护性。API调用熟练掌握wx.request进行网络请求并学会使用Promise或async/await进行异步处理避免“回调地狱”。用户系统利用wx.login获取code传给后端换取自定义登录态如token。用户头像昵称通过wx.getUserProfile获取注意用户授权策略变化。核心页面规划通常需要首页商品瀑布流/列表、发布页、商品详情页、个人中心页、消息页这五大主页面。2.2 后端Node.js Koa2 框架选择Node.js是因为它JavaScript语言统一了前后端对于学生来说上下文切换成本低。Koa2相对于Express更轻量基于async/await的中间件机制写起来非常优雅适合快速构建API服务。技术要点项目初始化使用koa-generator快速搭建项目骨架。路由管理使用koa-router按模块划分路由如/api/goods、/api/user、/api/upload等。中间件应用重点编写用于身份验证JWT、错误处理、请求日志的中间件。例如一个验证token的中间件能保护所有需要登录的接口。文件上传使用koa-body配合formidable或直接使用koa-static处理用户上传的商品图片并返回可访问的URL地址给前端。API设计原则遵循RESTful风格接口返回格式统一为{ code: 200, data: {}, msg: success }这样的结构。2.3 数据库MySQL RedisMySQL作为成熟的关系型数据库是存储用户、商品、订单等核心结构化数据的不二之选。Redis作为内存数据库在这里扮演两个关键角色缓存和会话存储。数据库设计核心表简化版用户表 (user):id,openid(小程序用户唯一标识),nickname,avatar,phone,create_time等。商品表 (goods):id,title,description,price,original_price,category_id,images(JSON格式存储图片URL数组),status(0待审核/1上架中/2已售出/3已下架),seller_id,view_count,create_time,location等。商品分类表 (category):id,name,icon。消息/聊天表 (message):id,goods_id,from_uid,to_uid,content,is_read,create_time。这里实现一个简化的“站内信”模型复杂实时聊天可用WebSocket但毕业设计用轮询或长连接也能交代过去。收藏表 (favorite)和浏览历史表 (history)也是体现产品细节的好设计。Redis的实战应用缓存热点数据将首页商品列表、热门分类信息缓存到Redis设置过期时间如60秒大幅减少数据库压力。存储验证码用户绑定手机号时发送的短信验证码以captcha:phone为key存入Redis设置5分钟过期。存储用户会话将JWT Token或Session ID与用户信息的映射关系存在Redis实现快速的登录态校验和集群部署时的会话共享。2.4 部署与运维Linux Nginx PM2对于毕业设计你至少需要一台云服务器学生优惠价很低来部署你的后端和数据库。Linux:选择CentOS 7.x或Ubuntu 20.04 LTS。Nginx:配置反向代理将域名或服务器IP的80端口请求转发到你后端Node.js服务运行的端口如3000。同时用它来托管前端小程序打包后的静态资源如果需要的话以及做负载均衡毕业设计单机即可。PM2:Node.js进程管理工具。用它来启动你的后端应用并实现进程守护应用崩溃自动重启、日志管理、性能监控。这是让项目稳定运行的关键一步。注意技术选型没有绝对的对错只有适合与否。这套选型兼顾了实用性、学习价值和答辩时的“技术亮点”。如果你对Java更熟后端可以换成Spring Boot如果追求极致开发速度小程序云开发云数据库也是合规的选择但可能不利于你深入理解后端原理。3. 核心功能模块设计与实现细节一个平台能否用起来关键看核心功能流程是否顺畅。下面我们深入拆解几个最关键模块的实现逻辑和代码细节。3.1 用户登录与身份系统小程序登录流程是第一个拦路虎。其核心是后端如何通过微信的接口将前端传来的临时code换成用户的唯一标识openid并建立自己的用户体系。后端接口/api/auth/login实现逻辑接收小程序端wx.login()获取的code。拼接参数请求微信接口https://api.weixin.qq.com/sns/jscode2session?appidxxxsecretxxxjs_codexxxgrant_typeauthorization_code。获取微信返回的openid和session_key。session_key是敏感信息绝不能传给前端检查数据库user表如果此openid不存在则创建一条新用户记录如果存在则更新最后登录时间。生成自定义登录态使用jsonwebtoken库以openid和user_id为payload生成一个JWT Token。将Token返回给前端。前端后续所有需要认证的请求都在header中携带Authorization: Bearer token。// 后端Koa2中间件示例JWT验证 const jwt require(jsonwebtoken); const authMiddleware async (ctx, next) { const token ctx.header.authorization?.replace(Bearer , ); if (!token) { ctx.throw(401, 没有token请重新登录); } try { const decoded jwt.verify(token, process.env.JWT_SECRET); ctx.state.user decoded; // 将解码后的用户信息挂载到ctx.state上 await next(); } catch (err) { ctx.throw(401, token无效或已过期); } }; // 在需要保护的路由中使用 router.get(/api/user/profile, authMiddleware, async (ctx) { const userId ctx.state.user.userId; // ... 查询用户信息 });3.2 商品发布与图片上传商品发布是核心交易流程的起点。难点在于多图上传和富文本描述虽然校园二手通常不需要太复杂。小程序端实现要点选择图片使用wx.chooseMediaAPI限制数量如最多9张和大小。上传图片遍历选中的图片文件调用wx.uploadFileAPI将文件上传到后端专门的文件上传接口。务必显示上传进度提升用户体验。表单提交所有图片上传成功后会得到一个URL数组。将URL数组连同商品标题、描述、价格、分类等表单数据通过wx.request提交到商品创建接口。后端接口/api/upload和/api/goods实现逻辑上传接口使用koa-body中间件处理multipart/form-data格式数据。将接收到的图片文件从临时目录移动到指定的静态资源目录如public/uploads并生成一个唯一的文件名使用UUID或时间戳随机数最后返回该文件的访问URL。商品创建接口接收前端传来的商品数据包含图片URL数组。验证用户身份、数据合法性如价格不能为负。将images字段URL数组以JSON字符串形式存入MySQL的text类型字段中。商品初始状态设为1上架中。实操心得图片处理是个大学问。毕业设计阶段可以直接存储原图。但在生产环境一定要考虑图片压缩使用sharp或imagemin库在服务器端压缩图片节省存储和流量。CDN加速将图片存储到对象存储如腾讯云COS、阿里云OSS并开启CDN让全国用户都能快速加载。图片安全检查上传文件的后缀和MIME类型防止上传恶意脚本。对图片内容进行鉴黄、鉴暴恐等审核可使用云服务商的AI内容安全服务。3.3 商品浏览、搜索与筛选首页和列表页是流量入口其性能和数据组织方式直接影响用户体验。1. 首页商品瀑布流分页加载后端提供分页查询接口如GET /api/goods?page1size10。前端使用小程序scroll-view组件或直接监听页面的onReachBottom事件实现上拉加载更多。-- 后端对应的SQL查询示例需按时间倒序并过滤已下架商品 SELECT * FROM goods WHERE status 1 ORDER BY create_time DESC LIMIT 0, 10;关键优化使用COUNT(*)查询总条数用于前端显示总页数但此操作在数据量大时较慢。对于无限滚动的瀑布流可以不做总数查询只判断当前返回的数据是否小于size小于则说明没有更多数据了。2. 搜索功能简单实现使用MySQL的LIKE语句进行模糊匹配如WHERE title LIKE %键盘%。但这是性能杀手不推荐用于大规模数据。毕业设计推荐方案使用MySQL的FULLTEXT全文索引。在goods表的title和description字段上建立全文索引然后使用MATCH ... AGAINST语法进行搜索效率远高于LIKE。ALTER TABLE goods ADD FULLTEXT INDEX ft_idx_title_desc (title, description) WITH PARSER ngram; -- 对于中文需要ngram解析器 SELECT * FROM goods WHERE MATCH(title, description) AGAINST(二手键盘 IN NATURAL LANGUAGE MODE) AND status 1;3. 多条件筛选前端将用户选择的分类、价格区间、位置等参数传到后端。后端动态构建SQL查询语句。// 后端Node.js代码片段使用Knex.js或Sequelize等ORM会更安全 let sql SELECT * FROM goods WHERE status 1; let params []; if (categoryId) { sql AND category_id ?; params.push(categoryId); } if (minPrice) { sql AND price ?; params.push(minPrice); } // ... 其他条件 sql ORDER BY create_time DESC LIMIT ?, ?; params.push((page-1)*size, size); // 使用数据库驱动执行带参数的查询防止SQL注入3.4 简易站内信与沟通实现一个完整的即时通讯IM系统对于毕业设计来说太重了。一个“简易站内信”系统足以满足基本沟通需求并体现你的设计能力。数据表设计message表的设计很关键。除了基础字段goods_id用于关联商品from_uid和to_uid标识发送方和接收方。is_read标记消息是否已读。业务流程用户在商品详情页点击“联系卖家”前端跳转到聊天页面并携带goods_id和seller_id。进入聊天页时加载该用户与卖家关于此商品的历史消息。用户发送消息前端调用/api/message/send接口后端将消息存入数据库并标记为未读。消息推送难点由于小程序不支持后端直接向用户推送常用方案有轮询聊天页面定时如每3秒调用/api/message/list接口拉取新消息。简单但低效、耗电。WebSocket建立长连接实现真正的实时通讯。这是更优解可以使用socket.io库。虽然增加了复杂度但作为毕业设计的技术亮点非常出彩。小程序订阅消息当用户不在聊天页面时可以发送一次性的订阅消息提醒“您有一条新消息”引导用户点击进入小程序查看。这需要用户事先授权。WebSocket简易实现思路后端使用ws或socket.io库创建WebSocket服务。用户登录小程序后建立WebSocket连接并将自己的user_id与连接进行绑定存储在内存或Redis中。当A给B发送消息时后端除了存数据库还检查B是否在线连接是否存在。如果在线则通过B的WebSocket连接直接将消息推送给B的前端。前端小程序使用wx.connectSocketAPI连接WS服务并监听onMessage事件接收实时消息。4. 数据库设计与优化实战数据库是项目的基石设计好坏直接影响性能和后续扩展。让我们深入ER图和核心SQL。4.1 核心表结构详解以下是为毕业设计优化的表结构增加了必要的索引和注释-- 用户表 CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, openid varchar(100) NOT NULL COMMENT 微信OpenID唯一标识, nickname varchar(100) DEFAULT NULL COMMENT 微信昵称, avatar_url varchar(500) DEFAULT NULL COMMENT 微信头像URL, phone varchar(20) DEFAULT NULL COMMENT 手机号需绑定, credit_score int(11) DEFAULT 100 COMMENT 信用分用于未来信誉体系, create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_openid (openid), -- 唯一索引防止重复用户 KEY idx_phone (phone) -- 手机号索引用于登录或查找 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表; -- 商品表核心 CREATE TABLE goods ( id int(11) NOT NULL AUTO_INCREMENT, title varchar(200) NOT NULL COMMENT 商品标题, description text COMMENT 商品详情, price decimal(10,2) NOT NULL COMMENT 现价, original_price decimal(10,2) DEFAULT NULL COMMENT 原价, category_id int(11) NOT NULL COMMENT 分类ID, images json DEFAULT NULL COMMENT 图片URL数组JSON格式如[url1,url2], status tinyint(4) NOT NULL DEFAULT 1 COMMENT 状态0-待审核 1-上架中 2-已售出 3-已下架, seller_id int(11) NOT NULL COMMENT 卖家用户ID, view_count int(11) DEFAULT 0 COMMENT 浏览量, location varchar(100) DEFAULT NULL COMMENT 交易地点如“宿舍楼A区”, is_recommended tinyint(1) DEFAULT 0 COMMENT 是否推荐, create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_seller_status (seller_id,status), -- 联合索引高效查询“我的在售商品” KEY idx_category_status (category_id,status,create_time), -- 联合索引高效查询分类列表页 KEY idx_status_time (status,create_time), -- 联合索引用于首页最新商品排序 FULLTEXT KEY ft_idx_title_desc (title,description) WITH PARSER ngram -- 全文索引用于搜索 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品表;4.2 索引优化与SQL性能上表定义中已经包含了关键的索引。这里解释一下为什么这么设计idx_seller_status (seller_id, status):当用户进入“我的发布”页面时最常见的查询是WHERE seller_id ? AND status IN (1,2,3)。这个联合索引能直接覆盖查询避免回表。idx_category_status (category_id, status, create_time):分类页面的典型查询是WHERE category_id ? AND status 1 ORDER BY create_time DESC。这个索引能同时满足筛选和排序效率极高。idx_status_time (status, create_time):首页查询最新商品WHERE status 1 ORDER BY create_time DESC。这个索引是专门为此优化的。FULLTEXT全文索引用于中文搜索比LIKE快几个数量级。记住对于InnoDB表全文索引只有在使用MATCH ... AGAINST语法时才生效。常见慢SQL与优化问题SELECT * FROM goods WHERE title LIKE %电脑% ORDER BY create_time DESC LIMIT 0, 20;分析LIKE %xxx%会导致全表扫描ORDER BY在大量数据时排序开销大。优化改用全文索引SELECT * FROM goods WHERE MATCH(title,description) AGAINST(电脑) AND status1 ORDER BY create_time DESC LIMIT 0, 20;。并在(status, create_time)上建立索引。4.3 事务与数据一致性在“商品售出”这个场景中涉及多个步骤1. 更新商品状态为“已售出”2. 可能生成一条订单记录3. 更新买卖双方的信用或交易计数。这些操作必须作为一个整体要么全部成功要么全部失败这就需要数据库事务。// 使用Koa mysql2库的事务示例 const connection await db.getConnection(); // 从连接池获取一个连接 await connection.beginTransaction(); // 开启事务 try { // 1. 更新商品状态 await connection.execute(UPDATE goods SET status 2 WHERE id ? AND seller_id ?, [goodsId, sellerId]); // 2. 创建订单记录假设有订单表 await connection.execute(INSERT INTO order (goods_id, buyer_id, ...) VALUES (?, ?, ...), [goodsId, buyerId]); // 3. 更新卖家售出数量 await connection.execute(UPDATE user SET sold_count sold_count 1 WHERE id ?, [sellerId]); await connection.commit(); // 所有操作成功提交事务 ctx.body { code: 200, msg: 交易成功 }; } catch (err) { await connection.rollback(); // 任何一步出错回滚所有操作 ctx.throw(500, 交易失败数据回滚); } finally { connection.release(); // 释放连接回连接池 }5. 毕业设计论文撰写与答辩要点项目做得好论文和答辩是展示成果的关键。切忌代码堆砌要体现你的思考和设计。5.1 论文核心章节组织绪论讲清楚背景校园二手交易现状、浪费问题、意义经济、环保、社交、以及你的小程序相比现有解决方案如闲鱼、微信群的优势更垂直、更安全、更便捷。相关技术介绍不要罗列教科书定义。结合你的项目讲你为什么选这些技术。例如“微信小程序提供了丰富的原生API和接近原生的体验其基于微信社交链的传播特性与本项目的校园熟人社区定位高度契合...”。系统需求分析画出用例图。分角色买家、卖家、管理员阐述功能性需求发布、浏览、搜索、沟通等和非功能性需求性能首页加载2秒安全性防SQL注入、XSS可扩展性等。系统设计这是重头戏。架构设计画出清晰的前后端分离架构图标明客户端、服务器、数据库之间的数据流。功能模块设计用文字和框图说明各个模块用户、商品、消息、管理等的职责。数据库设计给出完整的ER图并附上核心表结构说明就是前面我们设计的那几张表。重点解释你的索引设计思路为什么创建那些索引。接口设计挑选几个核心的RESTful API用表格形式说明其路径、方法、请求参数、响应格式和示例。这能极大体现你的工程规范性。系统实现与测试实现不要贴大段代码选择2-3个有代表性的核心代码片段并配以详细说明。例如JWT验证中间件如何工作、商品分页查询的SQL优化、WebSocket消息推送的实现逻辑。测试描述测试环境并用表格展示测试用例和结果。例如“测试商品搜索功能输入关键词‘教材’验证返回结果是否相关且包含关键词”。总结与展望总结你完成了什么遇到了哪些挑战如性能优化、实时通信是如何解决的。展望部分可以务实一点比如“未来可引入信誉评价系统”、“增加在线支付担保交易功能”、“适配多校区场景”等。5.2 答辩准备与演示技巧演示文稿PPT要简洁多图少字。重点放架构图、ER图、界面截图、核心代码截图和测试结果。现场演示这是最加分项。确保在答辩前将项目完整地部署到云服务器并准备好两个微信账号模拟买家和卖家在小程序端进行全流程演示注册/登录 - 发布商品 - 搜索商品 - 发起聊天 - 模拟成交。流程要流畅网络要稳定。预判问题技术类“为什么用Node.js不用Java”、“你的搜索功能是怎么实现的如何优化”、“如何防止恶意用户刷帖”、“数据一致性如何保证”业务类“和闲鱼比你的优势在哪”、“如何解决交易中的信任问题”、“如果用户发布违规信息怎么办”扩展类“如果用户量大了你的系统哪里会成为瓶颈如何优化”可以从数据库索引、缓存、负载均衡等方面回答。表达清晰用“我们”而不是“我”显得更专业。语速适中重点突出。遇到不会的问题可以坦诚地说“这方面我考虑得还不周全后续可以朝……方向优化”切忌不懂装懂。6. 开发部署全流程与避坑指南从零到一上线一个项目你会遇到无数坑。我把最常见的坑和解决方案整理如下希望能帮你节省大量时间。6.1 本地开发环境搭建小程序端安装微信开发者工具。创建小程序项目时AppID可以先使用测试号。在“详情-本地设置”中勾选“不校验合法域名...”方便本地调试。后端端安装Node.js建议LTS版本和MySQL。使用git bash或cmder等更好的命令行工具。数据库连接后端连接MySQL时新手常犯的错误是ER_NOT_SUPPORTED_AUTH_MODE。这是因为MySQL 8.0使用了新的默认身份验证插件caching_sha2_password而旧的Node驱动可能不支持。解决方案用命令行登录MySQL后执行ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密码; FLUSH PRIVILEGES;跨域问题开发时小程序请求本地后端接口如localhost:3000会因端口不同而跨域。解决方案在小程序开发者工具的“详情-项目配置”中勾选“不校验合法域名”同时在后端Koa中配置CORS中间件。// 安装 koa2-cors const cors require(koa2-cors); app.use(cors({ origin: function(ctx) { // 动态允许本地开发地址 return ctx.header.origin; }, credentials: true }));6.2 服务器部署上线购买与连接服务器选择腾讯云/阿里云的学生机。使用SSH工具如Xshell, FinalShell连接。环境安装yum install -y git nginx(CentOS) 或apt install -y git nginx(Ubuntu)。安装Node.js建议使用nvm管理多版本。安装MySQL从官网下载最新版或使用系统包管理器安装记得运行mysql_secure_installation进行安全初始化。拉取代码与安装依赖cd /var/www git clone your-repo-url your-project cd your-project/backend npm install --production # 只安装生产依赖配置Nginx# /etc/nginx/conf.d/your-domain.conf server { listen 80; server_name your-domain.com; # 或你的服务器IP location / { proxy_pass http://127.0.0.1:3000; # 转发到Node.js应用 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 静态资源托管如果你有的话 location /uploads/ { alias /var/www/your-project/backend/public/uploads/; } }测试配置并重启nginx -t systemctl reload nginx。使用PM2启动应用npm install -g pm2 cd /var/www/your-project/backend pm2 start app.js --name campus-second-hand pm2 save pm2 startup # 设置开机自启配置小程序后台在小程序管理后台的“开发-开发设置-服务器域名”中将request合法域名、uploadFile合法域名等设置为你的域名http://your-domain.com。必须是HTTPS你需要申请SSL证书云服务商提供免费证书并在Nginx中配置443端口监听和证书路径。6.3 常见问题排查清单问题现象可能原因排查步骤与解决方案小程序无法请求后端接口1. 域名未配置或配置错误2. 服务器防火墙未开放端口3. Nginx配置错误或未重启1. 检查小程序后台域名配置确保是备案的HTTPS域名。2. 在服务器执行curl http://localhost:3000/api/test看后端服务是否正常。3. 检查Nginx错误日志tail -f /var/log/nginx/error.log。图片上传失败或无法显示1. 上传目录权限不足2. Nginx静态资源配置错误1. 检查上传目录权限chmod -R 755 /path/to/uploads。2. 检查Nginx配置中location /uploads/的alias路径是否正确。数据库连接失败1. 数据库服务未启动2. 连接配置主机、端口、用户、密码错误3. 远程连接权限未开启1.systemctl status mysqld检查状态。2. 确认后端配置的数据库连接信息。3. 登录MySQL执行GRANT ALL ON *.* TO user% IDENTIFIED BY password; FLUSH PRIVILEGES;(生产环境请限制IP)。PM2应用频繁重启1. 应用代码有未捕获的异常2. 服务器内存不足1. 查看PM2日志pm2 logs campus-second-hand。2. 检查服务器内存使用free -h考虑优化代码或升级配置。搜索功能非常慢未使用索引或使用了错误查询使用EXPLAIN分析SQL语句如EXPLAIN SELECT * FROM goods WHERE title LIKE %xx%;确认是否使用了FULLTEXT索引。最后一点个人体会做这个项目的过程中最大的收获可能不是学会了某个特定的框架或语言而是建立起一个完整的“发现问题 - 设计方案 - 编码实现 - 测试部署 - 监控优化”的工程化思维。从纠结一个按钮的样式到设计数据库索引优化查询性能这种视角的转变是成为一名合格开发者的开始。遇到报错别慌学会看日志小程序开发者工具控制台、后端终端输出、Nginx错误日志、PM2日志搜索引擎是你最好的老师。祝你毕业设计顺利拿到优评本文还有配套的精品资源点击获取
返回列表