尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

微信商城小程序毕业设计源码解析与前后端MySQL联调实战指南

微信商城小程序毕业设计源码解析与前后端MySQL联调实战指南 简介面向高校学生与初学者的微信商城小程序毕业设计源码包整合了完整前后端、MySQL数据库、说明文档与LW论文适合毕业设计、课程设计或小程序电商入门实践。项目覆盖商品展示、购物车、下单处理、支付对接与订单管理等核心功能并提供Java/PHP两种后端实现思路运行环境为JDK1.8、MySQL5.7及以上配套Navicat数据库工具与uniapp/原生小程序前端框架便于快速部署复现。压缩包共2000个文件包含Java源码、Vue页面、SQL脚本、配置、说明文档以及后台管理操作录屏等整体约97MB目录结构清晰可按模块查阅。已有465人学习下载。对准备答辩或二次开发的学生而言这套资料提供了可直接运行的商城业务闭环、数据库表结构说明、后台操作演示和配置指引能有效缩短项目搭建与排错时间。1. 这不是一个普通小程序微信商城毕业设计源码成色与受众很多人把「微信商城小程序源码」这套 zip 拖回来解压双击 html发现没反应然后怀疑资源坏了。其实它不是一个小程序前端就完事的东西而是一整套毕业设计交付物小程序端负责界面交互后端提供接口MySQL 存数据说明文档和 LW论文支撑开题、中期和答辩材料。把它当成「小程序前端 后台接口 数据库设计 论文底稿」的组合体后面每一步才不会跑偏。对做毕业设计的学生来说它把最花时间的「从零搭一套可演示系统」压缩成了「配置好就能跑」省下的时间用来理解代码、准备答辩。对想练前后端分离项目实战的新手它也是完整样例登录态怎么保持、订单状态怎么流转、接口怎么设计都能在源码对应位置找到实现。适合它的人主要有两类要交毕设的计算机相关专业学生和小程序开发与 MySQL 联调的新手。如果只想要一个能直接上线的商城模板这套源码反而未必合适——它的侧重点在结构完整不在高并发和支付安全。2. 拆解前后端与MySQL这套商城源码的骨架和分层设计2.1 先分清前端原生小程序还是 uniapp决定了你怎么改解压之后先别急着找启动文件第一件事是判断小程序端是原生微信小程序还是 uniapp 工程。原生项目的标志很明确根目录有 app.json、app.js、project.config.json页面在 pages 目录下按 .wxml/.wxss/.js/.json 四件套组织。uniapp 工程的特征是根目录有 src/pages 加 manifest.json、pages.json或者直接有 uni.scss 和 vite.config.js 这类文件。判断错会带来连锁麻烦。原生小程序可以直接用微信开发者工具打开根目录就编译uniapp 需要先 npm install 再 npm run dev:mp-weixin生成 dist 目录之后用开发者工具导入 dist。如果拿 uniapp 工程当原生工程打开界面白屏还不报什么有用错误挺劝退的。从毕设资源的常见构成看多数商城类项目用的是原生小程序因为导师容易读代码答辩时随便挑一个页面的 wxml 就能讲也有部分是 uniapp声称一套代码能跑微信、安卓、iOS 和鸿蒙但实际联调时经常在小程序端的自定义组件上出兼容问题反而不如原生省心。另外看一眼 app.json 里的 navigationBarTitleText如果所有页面标题都从这里配说明是原生导航栏如果页面 json 里大量用 navigationStyle: custom说明做了自定义导航栏。自定义导航栏在后期适配 iPhone 刘海屏时要自己计算状态栏高度和胶囊按钮位置这也是毕设里最容易翻车的地方。建议先跑默认导航栏别为了好看去改 custom省下的时间够你调试好几个接口了。2.2 后端分了三层接口、业务、数据访问到底在哪后端是这套源码的另一半。最常见的毕业设计后端是 Spring Boot 工程用 RestController 暴露 JSON 接口Service 层写业务Mapper 或 DAO 层操作数据库。也有少量包是 Node.js 的 Express 或者 PHP 工程但分层思路一致路由controller到业务逻辑service再到数据查询model/mapper。以 Spring Boot 为例入口类一般是 XxxApplication.java接口代码在 controller 目录下。登录接口常见写法是 PostMapping(/api/user/login)商品列表常见 GetMapping(/api/goods/list)。拿到源码先全局搜 /api/ 这个前缀接口清单基本就出来了。可以快速看这段简化代码RestController RequestMapping(/api/goods) public class GoodsController { Autowired private GoodsService goodsService; GetMapping(/list) public Result list(RequestParam(defaultValue 1) Integer page, RequestParam(defaultValue 10) Integer size) { return Result.ok(goodsService.pageList(page, size)); } }这段代码的逻辑不复杂前端请求 GET /api/goods/list?page1size10Controller 把参数接住交给 goodsService 分页查询最终通过 Result.ok 包一层统一结构返回。参数说明里要留意的有两个一个是 RequestParam 的 defaultValue前端不传 page、size 也能跑另一个是 Result 这个统一封装类很多毕设的返回结构是 {code, msg, data}前端 request 封装就是靠这个 code 字段判断请求成功还是失败。如果你拿到的包用的不是 Result而是直接返回 Map 或实体那前端拦截器里的判断逻辑要对应调整。如果解压后看到的是 app.js 加 routes/ 目录这是 Node.js 工程登录路由通常在 routes/user.js 里格式类似 router.post(/login, userController.login)看到 index.php 和 controllers 目录就是 PHP 工程接口入口在 index.php具体方法在 controllers/Goods.php 这类文件里。定位方法都一样从小程序端请求的 URL 反推后端路由再用 IDE 的全局搜索确认文件位置。小程序端所有接口地址一般集中在 utils/config.js 或 api.js 里先看这个文件就知道整个项目有多少个接口、分别长什么样。2.3 MySQL 库表看懂商品、订单、用户三张核心表就懂了大半数据库脚本一般是一个 mall.sql 或 shop.sql 文件。导入之前先浏览一遍里面的建表语句重点是字段名和状态位设计。常见的商城表有这些user会员、category分类、goods商品、cart购物车、order订单、order_item订单明细、address收货地址、banner轮播图。如果包里有用户表没有角色表说明它做的是单角色 C 端商城管理员后台可能被省略了或单独在另一套代码里。商品表是理解整个项目的钥匙拿最常见的字段设计举例CREATE TABLE goods ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 商品ID, category_id int(11) NOT NULL DEFAULT 0 COMMENT 分类ID, name varchar(120) NOT NULL COMMENT 商品名称, subtitle varchar(200) DEFAULT COMMENT 副标题, main_image varchar(255) DEFAULT COMMENT 主图URL, price decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT 售价, stock int(11) NOT NULL DEFAULT 0 COMMENT 库存, sales int(11) NOT NULL DEFAULT 0 COMMENT 销量, status tinyint(4) NOT NULL DEFAULT 1 COMMENT 1上架 0下架, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品表;这段建表 SQL 可以当成阅读其他表的模板字段说明都在 COMMENT 里。留意三个容易改错的地方price 用 decimal(10,2) 而不是 float避免金额精度问题status 用 tinyint 状态位1 和 0 代表上架与下架查询时记得带上 status1 条件下架商品不该出现在小程序列表里stock 是 int后续做订单扣库存时直接 stock stock - 数量加锁和事务在高并发场景才有意义毕设不深究。DEFAULT 0 在 order、cart 这类表里也很常见比如默认收货地址字段 addr_default0 表示非默认1 表示默认。订单表的设计决定了下单流程怎么写。常见 order 表有 order_no订单号、user_id、total_price、status、address_snapshot、pay_time、create_time其中 status 一般用 0 待付款、1 待发货、2 待收货、3 已完成、4 已取消 这样的枚举。order_item 表记录每个商品的下单快照goods_id、goods_name、goods_image、price、count这里存的是商品信息的副本不是外键引用 goods 表——因为商品改名或下架后历史订单里的信息不能跟着变。这是电商系统里一个非常重要的设计细节也是答辩老师常问的点。顺便说一句外键从业界惯例看商城项目的表很少直接加 FOREIGN KEY 约束外键关系由程序在业务层保证。理由是外键在批量导入、订单删除和分库分表时会拖累性能还容易出现导入顺序问题。如果你的 sql 文件里已经写了外键导入报错时先查外键顺序先导父表再导子表如果没写外键那是正常做法不用补。3. 本地跑通微信商城数据库导入、后端启动与小程序编译三步走3.1 环境清单版本不对后面全是玄学跑这套项目之前先对齐环境很多莫名报错其实是版本差出来的。毕业设计常见的后端是 Spring Boot 2.x对应 JDK 1.8不要手滑装 JDK 17否则 maven 编译会报一些和 javax 包相关的兼容错误。MySQL 用 5.7 最稳用 8.0 也行但连接驱动和账号认证方式会有差异这个在第 5 章单独说。小程序端用微信开发者工具最新稳定版不需要申请 AppID选「测试号」也能编译大部分页面只有涉及登录和支付的功能才必须换正式 AppID。列一份我常用的环境对照表组件版本建议说明JDK1.8Spring Boot 2.x 项目默认maven 配置与编译不易出幺蛾子MySQL5.7 或 8.05.7 最容易跑通8.0 需处理认证插件微信开发者工具最新稳定版基础库版本会影响 ES6 语法兼容后端启动方式mvn 或 IDEIDEA 打开后端工程直接跑或 mvn spring-boot:run数据库客户端Navicat 或命令行导入 sql 用选顺手的一个即可这里我一般先把 MySQL 装好默认端口 3306root 密码设一个纯数字短密码比如 123456。这不是生产环境的安全建议但毕设项目里写复杂的密码只会增加配置出错概率密码复杂度和字母大小写问题不值得在联调阶段浪费时间。3.2 导入数据库命令行与 Navicat 两条路数据库文件通常叫 mall.sql、db_mall.sql 或 shop.sql在压缩包根目录或者 sql/ 文件夹下。导入前先打开 sql 文件拉到开头看里面有没有 CREATE DATABASE 和 USE 语句。有的话直接导入即可库会被自动创建没有的话需要先手动建一个空库再把 sql 灌进去。命令行方式最直接mysql -uroot -p123456 /path/to/mall.sql登录 MySQL 之后检查表是否到位SHOW DATABASES; USE mall; SHOW TABLES; SELECT COUNT(*) FROM goods;第一行命令的作用是以 root 身份执行 mall.sql 里的全部语句把建库、建表、初始数据一次做完。如果终端报 ERROR 1049 (42000): Unknown database说明 sql 里没有建库语句你需要先执行 CREATE DATABASE mall CHARACTER SET utf8mb4; 再重新导入如果报 ERROR 1064多半是 sql 文件的字符集和终端不一致改用 Navicat 导入能规避大多数编码问题。Navicat for MySQL 的路径是连接本地 MySQL 服务新建一个同名数据库排序规则选 utf8mb4_general_ci右键该库选「运行 SQL 文件」选中 mall.sql 执行。完成后刷新表结构出现在左侧列表。Navicat 的好处是能看到每条报错对应哪一行 SQL但要注意导入前确认文件编码是 UTF-8否则中文注释和商品名会变成乱码。3.3 改配置三件套数据库账号密码、接口地址、小程序 AppID导入成功之后改三处配置就能把项目串起来。第一处是后端数据库连接配置。Spring Boot 工程在 src/main/resources/application.yml或 .properties里找到 spring.datasource 这一段spring: datasource: url: jdbc:mysql://localhost:3306/mall?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver这段配置里最容易错的是 url 后面的参数。useUnicodetrue 和 characterEncodingutf8 保证中文不乱码serverTimezoneAsia/Shanghai 是 MySQL 8.0 连接必须加的否则会报时区错误driver-class-name 在 5.7 用 com.mysql.jdbc.Driver8.0 建议写 com.mysql.cj.jdbc.Driver写错会在启动时直接抛 ClassNotFoundException。如果包里用的是 druid 连接池配置项会前缀变成 spring.datasource.druid本质逻辑一样。第二处是小程序端接口地址。找到 utils/config.js 或 api.js里面一般长这样module.exports { baseUrl: http://localhost:8080, // baseUrl: http://192.168.1.100:8080, // 真机调试时换成电脑局域网IP timeout: 10000 }baseUrl 决定了小程序所有请求去哪台服务器。开发者工具里可以用 localhost真机预览时必须改成你电脑的局域网 IP比如 192.168.1.100且手机和电脑连同一个 WiFi。忘记换 IP 是「开发者工具正常、真机全部失败」最常见的原因。第三处是 project.config.json 里的 appid。如果只是本地编译把 appid 改成你的测试号或者留空开发者工具会弹提示帮你补如果要做登录功能需要在小程序后台申请正式 AppID并把服务器域名配置到 request 合法域名里。本地调试阶段可以直接勾选开发者工具右上角「详情-本地设置-不校验合法域名」。3.4 启动后端并验证接口curl 打一个商品接口配置改完启动后端。IDEA 里直接运行 XxxApplication 主类命令行则进入后端根目录执行mvn spring-boot:run看到 Tomcat started on port(s): 8080 字样表示启动成功。如果启动时报数据库连接失败回到 3.3 检查密码和 url如果报端口被占用用 netstat -ano | findstr 8080 查占用进程或者改 application.yml 里的 server.port。启动后先在浏览器或 curl 验证一个只读接口curl http://localhost:8080/api/goods/list?page1size5返回 JSON 数组且包含商品名称、价格字段说明后端到数据库的整条链路是通的。如果返回 404到 Controller 里核对 RequestMapping 的实际路径常见情况是多了 /api 或少了 context-path 前缀如果返回 500 且日志里有 SQL 异常去 3.3 检查表名是否和 Mapper 里的 TableName 或 SQL 对得上。接口通了再进小程序开发者工具此时商品页应该能拉到真实数据。有些毕业设计后端不是 spring-boot:run 直接启动而是打成 war 包放进本地 Tomcat 的 webapps 目录。这种情况下接口路径会带项目名例如 http://localhost:8080/mall/api/goods/list小程序 baseUrl 里也要相应带上 /mall 前缀。判断方法很简单看后端源码里有没有 web.xml 或 extends SpringBootServletInitializer 的入口有的话按 war 方式部署启动后访问 http://localhost:8080/mall 看是否出现接口文档页或登录页。4. 前后端联调登录态、跨域与 request 封装的三个关键点4.1 微信登录链路wx.login 的 code 只能换一次 openid小程序商城的登录和网页登录完全不同。网页登录是输入账号密码小程序里更常见的方式是「静默登录」前端调 wx.login() 拿到一个一次性 code把它发给后端后端拿 code 加小程序的 AppID 与 AppSecret 去微信接口换 openid 和 session_key后端再拿 openid 查 user 表有新用户就自动注册老用户直接生成一个 token 返回给前端。前端把 token 存到本地缓存后续所有请求带上它后端就知道你是谁。这段链路里新手最常踩的坑是把 code 当成固定凭证反复用。code 有效期只有五分钟而且只能用一次同一段演示代码里如果调用了两次 wx.login 再把 code 发出去第二次必定失败接口返回 40029。所以毕设代码里登录逻辑应该写成进入小程序首页先检查本地有没有 token没有才调 wx.login不要每次进页面都重新登录。小程序端登录代码常见是这样wx.login({ success: async (res) { if (res.code) { const { data } await request({ url: /api/user/login, method: POST, data: { code: res.code } }) wx.setStorageSync(token, data.token) wx.setStorageSync(userInfo, data.userInfo) } } })登录接口的入参只需要一个 code不需要用户名密码。这里 request 是封装过的请求方法统一加了 baseUrl 和 Content-Type。后端拿到 code 之后要做的核心事情是请求微信的 jscode2session 接口换 openid——注意这一步必须在后端完成不能在小程序端直接调因为 AppSecret 放在前端等于直接泄露。后端换完 openid 后查库、发 token、返回用户资料三步走完前端拿到结果存缓存再跳转页面。4.2 request 封装注入 token401 直接踢回登录页小程序原生 wx.request 写起来很啰嗦每个页面都要重复写 url、method、header所以毕设项目里一般都会有一层封装。封装的职责是三件事自动拼接 baseUrl、自动从缓存取 token 放进 header、统一处理返回结构里的 code 和 HTTP 状态码。一个够用的封装长这样const request (options) { return new Promise((resolve, reject) { wx.request({ url: getApp().globalData.baseUrl options.url, method: options.method || GET, data: options.data || {}, header: { Content-Type: application/json, token: wx.getStorageSync(token) }, success: (res) { if (res.data.code 0) { resolve(res.data.data) } else if (res.statusCode 401 || res.data.code 401) { wx.removeStorageSync(token) wx.navigateTo({ url: /pages/login/login }) reject(res.data) } else { wx.showToast({ title: res.data.msg, icon: none }) reject(res.data) } }, fail: (err) reject(err) }) }) }header 里传 token 是常见做法字段名由后端决定有的是 Authorization有的是 token拿到包先看后端拦截器源码里读的是哪个 header对不上就改这里。401 的处理是整个封装的精髓token 过期或无效时后端返回 401封装里清掉本地缓存并跳登录页避免用户停留在需要登录的页面上一脸懵。很多毕业设计翻车就翻在没做这层处理token 过期后商品页一直弹加载失败。4.3 接口地址与域名校验本地改一处真机全废联调阶段最折磨人的是「开发者工具里一切正常手机一扫码全部请求失败」。九成原因是 baseUrl 里的 localhost 在手机上指向手机自身而不是你的电脑。解决办法前面提过改成本机局域网 IP手机和电脑同 WiFi。这里一定注意微信小程序的域名限制正式环境小程序的 wx.request 只能请求 HTTPS 且在小程序后台配置过 request 合法域名的地址。本地开发可以通过「详情-本地设置-不校验合法域名、web-view业务域名、TLS 版本以及 HTTPS 证书」绕过但一旦上传体验版没配置合法域名的接口直接被拦截。毕业设计演示一般用开发者工具或真机调试顶过去但评审老师如果坚持用体验版域名这关逃不掉——要么买域名配 HTTPS 证书做反向代理要么让后端把接口部署到已备案的 HTTPS 服务器上这个成本在毕设阶段确实不低很多人最后是借免费证书临时搞定或者干脆用测试号在开发者工具里全程演示。前后端分离项目里后端接口常遇到跨域问题但小程序客户端本身没有浏览器同源策略跨域主要影响的是你用浏览器直接访问后端接口调试的场景。为了方便浏览器调试后端 Controller 或配置类里一般会加跨域支持常见是 WebMvcConfigurer 里 addCorsMappings 允许所有来源如果拿到包没有加浏览器调试接口会看到 CORS 报错curl 却能正常返回不用慌给后端补一个跨域配置类或者改用 curl 调试即可。请求超时也值得单独设。有的毕设代码里 wx.request 没配 timeout小程序默认 60 秒超时接口挂了用户要干等一分钟才看到报错。封装时建议把 timeout 设为 10000配合全局 loadingwx.showLoading 和 wx.hideLoading至少让用户知道请求在进行。另外部分项目会把商品列表和购物车数据用 wx.setStorage 做本地缓存避免每次打开都请求网络这在网络慢的演示环境里有奇效但要注意缓存 key 的设计和更新时机——购物车数量变化后必须清掉旧缓存否则会出现「加了商品列表页数量不变」的尴尬。5. 微信商城源码常见问题排查5 个高频故障的定位与解决5.1 MySQL 起不来error 2002 与 1251 两座山现象后端启动或 Navicat 连接时报 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock。原因MySQL 服务没有运行或者 socket 文件路径不对。Linux 和 macOS 上刚装完 MySQL 后服务默认不自动启动Windows 上则是服务没启动或 3306 端口被占用。解决Linux 执行 systemctl start mysqld或 service mysql startmacOS 用 brew services start mysqlWindows 在服务管理器里启动 MySQL 服务。如果服务已经启动仍然报 2002大概率是连接时写的主机名或 socket 路径不对Navicat 里主机写 127.0.0.1 而不是 localhost可以绕开 socket 走 TCP。另一个常见变体是 MySQL 8.0 报 1251Client does not support authentication protocol requested by server原因是 8.0 默认认证插件是 caching_sha2_password而旧版 JDBC 驱动或 Navicat 版本只支持 mysql_native_password。解决方法是执行一遍下面这条 SQL把 root 的认证方式改回去ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123456; FLUSH PRIVILEGES;这行命令把 root 用户的密码插件改成 mysql_native_password密码同步改成 123456。改完后重启 MySQL 服务旧客户端就能连上了。如果项目里还有多个数据库账号同样方式逐个改即可。MySQL 8.0 连接时还常看到 SSL connection error 或 SSL 证书校验失败的报错Navicat 连接属性里把 SSL 选项设为禁用或 JDBC url 末尾加上 useSSLfalse就能绕开证书校验的问题。毕设场景不需要启用 SSL 加密连接能省则省。5.2 端口占用后端起不来先查 8080现象mvn spring-boot:run 启动时报 Port 8080 was already in use。原因之前启动的后端进程没关干净或者有别的程序占了 8080。解决Windows 用 netstat -ano | findstr 8080 找到占用 PID然后 taskkill /PID /FLinux 用 lsof -i:8080kill 掉对应进程。改端口也行但要记得同步改小程序 config.js 里的 baseUrl。另外 IDEA 里停止项目时如果用的是 Debug 模式有时进程残留直接看控制台右侧的停止按钮是否置灰。这个问题不大但答辩现场真遇到了很耽误时间建议演示前一晚把后端、数据库、小程序三件套完整重启一遍把端口和内存分配问题提前暴露出来。5.3 小程序编译报错ES6 语法不兼容基础库现象开发者工具编译报 SyntaxError指向某个箭头函数或 async/await 文件或者页面打开白屏但编辑器没有明显报错。原因开发者工具的「ES6 转 ES5」没勾上或者基础库版本太低不支持部分新语法。毕业设计源码常混用 const、箭头函数、Promise、async/await这些在老基础库上会出问题。解决详情 - 本地设置 - 勾选「ES6 转 ES5」。如果勾了还报错把基础库版本往上调一档详情里调试基础库选较新的稳定版。还有一类情况是开发者工具缓存改完设置后「清缓存 - 全部清除」再重新编译。必要时在 project.config.json 里检查有没有 libVersion 字段限制版本。这个坑看起来小但在没有网络环境下演示时会直接卡死开场。5.4 登录接口 404 或 401按三层定位法查现象小程序点登录没反应Network 面板里请求显示 404 或 401或者提示「请求的 URL 不在合法域名列表中」。原因404 多半是接口路径写错或后端没启动401 多是 token 缺失或过期「不在合法域名」是没开不校验合法域名的开关。解决按三层定位。第一层看请求 URL和 config.js 里的 baseUrl 拼接一下确认地址打到了后端第二层用 curl 直接请求同一个接口如果 curl 通而小程序不通问题在前端网络配置如果 curl 也不通问题在后端路由或拦截器。登录接口的 401 最常见是拦截器放行名单里没把 /api/user/login 放行后端代码里加一个白名单配置即可。这个定位方法用顺了之后前后端联调时会有一种「不再靠猜」的踏实感——很多血泪教训都是从不分青红皂白改代码开始的。5.5 开发版过期与演示白屏答辩前一天必查项目现象扫码预览提示「开发版小程序已过期请在开发者工具重新扫码」或者真机打开后页面一片空白但开发者工具正常。原因开发版预览有 30 天有效期过期就没法打开白屏多半是 baseUrl 还是 localhost或者电脑防火墙拦了手机请求。解决重新打开开发者工具上传或预览一次生成新的开发版二维码白屏就把 baseUrl 改成电脑局域网 IP并在 Windows 防火墙里放行 8080 端口。这里有一个答辩前必做的清单断网环境下开发者工具能否编译通过、后端能否启动、MySQL 能否连接。答辩现场的局域网不一定允许访问外网如果登录功能依赖微信接口最好提前把登录的降级方案准备好比如后端写死一个测试账号直接放行。不要赌现场网络这是最实在的一条经验。6. 答辩之前用抓包、状态机和文档一致性给商城源码加码6.1 先用抓包验证三个核心链路答辩演示最重要的不是功能多而是每个动作都有预期结果。把系统压缩成三个链路反复过登录到商品列表数据从 MySQL 读到前端、加购到下单到订单列表数据写回 MySQL、个人中心到退出登录缓存清理。微信开发者工具的 Network 面板就能看请求四要素URL、状态码、请求参数、响应数据。抓包时留意登录接口的响应时间超过 2 秒就查慢 SQL下单后去数据库查 order 表最新记录的 status 是否为预期状态把截图放进论文「系统可用性验证」这一节就扎实了。6.2 答辩老师爱问的订单状态机与动态标题订单状态机是商城类毕设被问概率最高的问题。状态一般设为 0 待付款、1 待发货、2 待收货、3 已完成、4 已取消。老师追问「30 分钟未付款怎么关单」时答不出实现可以给出方案order 表加 expire_time 字段后端定时任务扫描并置为已取消。另外两个容易出彩的细节页面标题用 wx.setNavigationBarTitle 按登录用户动态修改商品列表和购物车做本地缓存时把时间戳一起存超时后重新请求封装一个几十行的 setCache 带过期时间方法论文里也能写。6.3 文档一致性检查与离线演练说明文档和 LW 的质量参差先做一致性检查架构图对照后端目录E-R 图对照 mall.sql 的建表语句时序图对照登录接口走一遍不一致改文档比改代码快。论文里的功能列表逐条对着页面过一遍没实现的功能果断删别让老师发现文档和系统对不上。我自己的习惯是答辩前三天把全流程在离线状态走两遍一遍正常演示一遍模拟后端挂掉看报错是否可接受前者保证功能完整后者保证老师突然追问时心里有底。这套经验送给你希望帮到你。本文还有配套的精品资源点击获取
返回列表