☰
Java+小程序+MySQL花店毕设:从配置到联调避坑全指南
2026/10/30 7:27:41 网站建设 项目流程

简介:网上花店微信小程序完整源码,基于Java后端与小程序前端实现,数据存储采用MySQL,面向毕业设计或课程设计场景,适合具备一定Java基础、希望快速打通前后端关卡的开发者。系统内置管理员与用户双角色:管理员可维护用户信息、公告与鲜花内容,并能与用户互动交流;用户端可浏览鲜花、公告并查看管理员回复,功能边界清晰。压缩包内共1778个文件,大小约36.23MB,以Vue、JS、Java、JSON及图片资源等类型为主,覆盖后端Java工程、小程序前端页面、数据库SQL脚本,并搭配环境说明与启动批处理文件,可适配JDK1.8、MySQL5.7、Tomcat7及微信开发者工具。目前已有63人学习下载。源码完整且能直接运行,从页面调用、后端处理到数据表结构均有迹可循,便于拆解小程序商城类项目的基础实现;同时预留扩展空间,可在此基础上增加订单、支付或营销模块,适合作为课程设计与毕业设计的起点。

1. 基于小程序的网上花店微信小程序:这套 Java+小程序+MySQL 毕设包到底能用来做什么

如果你是正在做毕业设计、课程设计,或者想快速搞一个"能演示、能答辩、能改改就能商用"的微信小程序项目,这个标题里的压缩包十有八九会在你的收藏夹里躺过一阵。它本质上是一个典型的前后端分离学生项目:前端是微信小程序,用户端负责浏览花束、加购物车、下单;后端是 Java(常见的是 Spring Boot + MyBatis)提供接口;MySQL 存商品、订单、用户等数据;LW 部分一般是论文/设计文档,用来凑齐毕设的"文字工作量"。

这类项目最大的价值是把一条完整业务链路摆在了你面前:从微信小程序的首页轮播、分类列表、商品详情,到购物车结算、订单状态流转,再到后端的接口、数据库的设计,你不需要从零造轮子,而是顺着源码去理解"电商小程序是怎么搭出来的"。它的坑也很典型:MySQL 连接不上、小程序真机预览连不到本地 Java 服务、图片路径 404、订单状态对不上——这些坑几乎会出现在每一个类似的毕设项目中,遇到过一遍之后,你再去接任何小程序项目都会心里有底。

这篇笔记我按"怎么跑起来 → 后端怎么连 → 数据库怎么建 → 前端怎么调 → 出问题怎么查 → 怎么拿去演示"的顺序写,适合刚拿到源码想两天内跑通的人,也适合想把这套项目改造成自己毕设的人。你不需要有很深的 Java 功底,但最好装好了 JDK 8+、Maven、MySQL 5.7/8.0 和微信开发者工具。下面直接开始。

2. 先把项目跑起来:导入小程序前端、启动 Java 后端、改掉 3 个必改配置

2.1 拿到压缩包后先别急着解压,先看清目录结构里有什么

正常这类毕设包解压后会有几个平级目录:一个小程序前端目录(名字经常是miniprogram或flower-shop),一个 Java 后端目录(常见flower_shop_boot或server),一个数据库 SQL 文件(.sql),还有一份 LW 文档目录。这些目录不是随便放的,前端和后端通过 HTTP 接口通信,MySQL 是两者之间的公共数据层。

我一般会先打开后端目录里的src/main/resources/application.yml(或.properties),把端口、数据库账号密码、日志级别这三项看清楚。默认端口常见是8080,数据库用户名密码可能是root / root或root / 123456,如果和你本机不一致,后面启动后端必挂。另外注意后端项目的pom.xml里 Java 版本,如果是 Spring Boot 2.x,JDK 8 或者 11 都行;如果是 Spring Boot 3.x,必须 JDK 17 以上。很多同学卡在启动失败,不是代码问题,是 JDK 版本不对。

2.2 导入微信小程序前端:开发者工具里的两个关键勾选

打开微信开发者工具,选择"导入项目",目录选到小程序前端那一层(必须是有app.js、app.json的那一层)。AppID 可以先选测试号,等后面要真机预览时再换成你自己的。导入后第一件事不是点编译,而是点右上角"详情"里的"本地设置",勾选"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"。

这一项不勾,小程序去请求http://localhost:8080或http://192.168.x.x:8080会被拦截,页面会一直转圈,控制台报request:fail或者url not in domain list。我见过很多人在这一步卡了半小时,以为是接口写错了,其实是开发工具默认不允许访问 HTTP 域名。这个勾选只对开发工具有效,真机预览时同样要在手机端打开"调试模式"才能访问内网后端。

修改前端的接口地址也是这一阶段的核心。打开utils/request.js或app.js,找到类似baseUrl: 'http://localhost:8080'的配置,改成你电脑的局域网 IP,比如http://192.168.1.100:8080。这样做的原因后面专门讲,但现在你先把本地跑通,localhost就行。

2.3 启动 Java 后端:Maven 拉依赖、改数据源、看启动日志

后端用 IDEA 打开(社区版也行,但要有 Lombok 插件,不然编译报错),等 Maven 自动下载依赖。如果下载慢,检查 Maven 仓库镜像,阿里云镜像一般能解决。启动前先把application.yml里的 MySQL 地址改对,格式常见是:

server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/flower_shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true

这段配置里url有几个关键点:flower_shop是数据库名,要先在 MySQL 里建好;useSSL=false是为了避免 MySQL 8.0 默认的 SSL 连接警告,如果你用的是 MySQL 5.7,不加这行也可以;serverTimezone=Asia/Shanghai不写的话,时间字段可能比正常时间差 8 个小时。driver-class-name如果是com.mysql.jdbc.Driver但你的 MySQL 连接包是 8.x,必须改成com.mysql.cj.jdbc.Driver,否则启动直接报ClassNotFoundException。

启动方式可以直接运行带main方法的启动类,或者在项目根目录执行mvn spring-boot:run。启动成功的标志是控制台出现Started Application in X seconds以及 Tomcat 端口号。这时候你先别急着打开小程序,先在浏览器访问一下http://localhost:8080/api/products或类似的路由,能返回 JSON 就说明后端和数据库已经通了。如果你不确定有哪些接口,看后端 controller 包里的@RequestMapping路径。

2.4 三个必改配置清单

结合上面的流程,我把每次拿这类项目最容易翻车的配置点列一份清单,你按顺序查一遍,基本能避免 80% 的启动问题:

配置项常见错误正确做法
MySQL 版本与驱动用 MySQL 8.0 却配 5.x 驱动8.x 用com.mysql.cj.jdbc.Driver,并加useSSL=false
数据库名连接串里的库名还没建先执行 SQL 文件建库建表,再启动后端
小程序 baseUrl写死localhost,真机连不上局域网调试用http://192.168.x.x:8080,并在工具里勾选不校验域名
JDK 版本Spring Boot 3 项目用 JDK 8升级 JDK 17+,或换用源码里的旧版本分支
端口占用8080被其他程序占用改server.port,比如8081,同时改小程序端地址

这些配置十分钟内能改完,但确实是最常见的翻车点。我自己的习惯是先把后端启动起来,确认接口有响应,再去碰小程序,这样排查问题时能分清是前端问题还是后端问题,不会两头猜。

3. MySQL 数据库:从建库到初始化,花店项目的表结构和数据填充一次搞清

3.1 为什么这类项目必须用 MySQL,而不是 SQLite 或文件存储

花店小程序涉及商品、用户、订单、购物车、轮播图等实体,这些实体之间有明确的外键关系,比如订单里有用户 ID 和商品 ID,购物车要按用户分组。MySQL 是这类毕设的标准选择,不只是因为标题写了 MySQL,更因为它的事务能力能保证下单时"扣库存"和"生成订单"要么都成功,要么都失败。SQLite 在本地开发虽然方便,但你用到LEFT JOIN多表查询时,性能和语义都不如 MySQL 直观。

另外,Java 后端里用的 MyBatis 或 MyBatis-Plus 自带分页插件和 XML 映射,和 MySQL 的语法配合很熟练。你后面如果想改成 PostgreSQL,需要换掉不少 SQL 方言写法,但这不是毕设项目该干的事。所以拿到这个项目包,你先老老实实把 MySQL 装好,把.sql文件导进去,这是成本最低的路。

3.2 安装 MySQL 并导入源码 SQL 文件的操作步骤

如果你机器上还没有 MySQL,建议直接装 MySQL 5.7.44 或 8.0 的社区版。5.7 的安装教程网上非常多,核心点就三个:一是安装时选 UTF-8 字符集,二是一定要记住 root 密码,三是 Windows 上用net start mysql验证服务启动了。如果你用的是 macOS 或 Linux,用 Homebrew 或 apt 装完还要注意 MySQL 的 socket 路径。

装好之后打开命令行客户端或 Navicat,执行以下命令创建数据库:

CREATE DATABASE IF NOT EXISTS flower_shop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE flower_shop; SOURCE /你的完整路径/flower_shop.sql;

utf8mb4必须用,因为旧版utf8存不了 emoji,而小程序里用户昵称经常带 emoji。SOURCE是 MySQL 命令行导入 SQL 文件的方式,比复制粘贴好,能保证多语句执行顺序正确。如果你用的是 Navicat,直接右键数据库"运行 SQL 文件"即可。导入完成后你可以先查一下表数量:

USE flower_shop; SHOW TABLES;

正常会看到user(用户)、product(商品)、product_category(分类)、cart(购物车)、orders(订单)、order_detail(订单明细)、banner(轮播图)这些表。如果少了表,多半是 SQL 文件里建表语句被分号截断了,或者你导入时没选对数据库。

3.3 核心表结构和字段边界:看懂表才能改功能

花店这种项目核心是商品和订单,我把最常见的表结构拆开讲。product表一般有id、name、price、original_price、image、stock、category_id、description、status等字段。这里有两个需要注意的地方:price经常用DECIMAL(10,2)而不是DOUBLE,因为浮点计算会出精度问题,比如 0.1 加 0.2 不等于 0.3;image字段存的是相对路径或完整 URL,如果存的是images/rose.jpg这种,前端拼接地址时漏了域名,图片就显示不出来。

orders表是关键中的关键,字段一般有order_no(订单号)、user_id、total_price、status、create_time、pay_time等。status常用0待支付、1已支付、2已发货、3已完成、4已取消。你要改业务逻辑,比如增加"退款中"状态,就必须在前后端和数据库三处同步改,别只改前端按钮文案。

订单明细表和商品表的关系是order_detail.product_id指向product.id,这样设计是因为订单生成后商品价格可能变动,所以明细表里要冗余一份商品快照的名称和价格,不能在查询订单时再去 join 商品表拿现值,否则用户看到的历史订单价格会随商品价格变化,这是电商系统的基本规矩。

3.4 数据库连接参数里的隐藏坑:SSL、时区和连接池

回到后端配置,useSSL=false这个参数在 MySQL 8.0 里几乎必加。如果你不写,MySQL 8.0 默认开启 SSL,会在启动日志里报一串SSL connection error: unknown error警告,虽然不影响运行,但很吓人,而且某些旧版本驱动会直接连接失败。我见过有人被这个警告误导,去改了 SSL 证书,最后发现把useSSL=false加上就干净了。

serverTimezone=Asia/Shanghai也建议写上,特别是在国内服务器上。MySQL 驱动版本不同,默认时区可能被识别成 UTC,导致create_time查询出来比本地时间差 8 小时,小程序端展示的订单时间就错了。这不是 bug,是时区问题,别去代码里+8,在连接串上统一指定时区才是正解。

连接池参数一般藏在application.yml里,比如initial-size、max-active、max-wait。如果是毕设项目,保持默认即可,但你如果要压测或者演示时同时很多人访问,可以把max-active调到 20,max-wait调到 5000 毫秒,避免并发高峰时拿不到连接。这些参数改完记得重启后端,改配置不生效是最常见的"我明明改了为什么没用"。

4. 小程序端与 Java 接口联调:请求封装、登录态、商品列表和下单全链路

4.1 小程序请求封装:别在每个页面都写 wx.request

大多数同类毕设的前端代码里,会把wx.request包在utils/request.js里,统一处理基础 URL、请求头、登录 token 和错误提示。如果没有封装,页面里到处是裸的wx.request,你改一个 baseUrl 得全项目替换,那维护起来就是灾难。我建议你先看源码里有没有这个文件,没有就自己写一个,后面所有接口都走它。

请求封装的核心是返回值统一处理。你期望后端返回的格式一般是{ code: 0, msg: 'success', data: {...} },这是前后端约定。小程序端在拿到响应后先判断code,等于 0 才往下走,否则直接 toast 报错。封装代码大概长这样:

// utils/request.js const BASE_URL = 'http://localhost:8080/api'; function request(path, method, data) { return new Promise((resolve, reject) => { wx.request({ url: BASE_URL + path, method: method || 'GET', data: data || {}, header: { 'Content-Type': 'application/json', 'token': wx.getStorageSync('token') }, success(res) { if (res.data.code === 0) { resolve(res.data.data); } else { wx.showToast({ title: res.data.msg, icon: 'none' }); reject(res.data); } }, fail(err) { wx.showToast({ title: '网络请求失败', icon: 'none' }); reject(err); } }); }); } module.exports = { request, BASE_URL };

这里把BASE_URL单独提出来,后面真机调试时只改这一个地方。token从本地缓存取,如果没有登录过就是空字符串,后端需要匿名接口做兼容,比如轮播图接口就不需要 token。注意fail分支里的 toast 要简洁,因为真机网络出错时用户需要明确提示,而不是页面静默转圈。

4.2 登录态处理:wx.login 换 token,还是直接传 openid

花店小程序的登录逻辑有几种写法。标准的做法是前端调用wx.login拿到临时code,发给后端的/api/auth/login,后端拿着 code 去微信接口换 openid,再生成自己的 token 返回。但很多毕设项目省掉了微信接口,而是直接在小程序端用wx.getUserProfile拿头像昵称,加上一个假的 openid 或者设备唯一标识,拼一个用户对象传给后端。

这两种方式在毕设里都能跑通,区别在于前者更接近真实上线,后者省去了申请小程序 AppSecret 的麻烦。如果你想在演示时不用登录就能看商品,后端接口就把token设成可空;如果要看购物车和订单,用户必须登录。我建议你把登录流程固定在app.js的onLaunch里,这样用户一进小程序就静默登录,在页面里不需要再调一遍。登录接口的代码大致是:

@PostMapping("/api/auth/login") public Result login(@RequestBody LoginRequest loginRequest) { String openid = loginRequest.getOpenid(); User user = userMapper.findByOpenid(openid); if (user == null) { user = new User(); user.setOpenid(openid); user.setNickname(loginRequest.getNickname()); userMapper.insert(user); } String token = UUID.randomUUID().toString().replace("-", ""); user.setToken(token); userMapper.updateToken(token, user.getId()); return Result.success(token); }

这段代码的逻辑是"查不到就注册,查得到就更新 token"。token 直接用 UUID 生成,简单够用;正式项目会用 JWT,但毕设里存数据库表字段的方式更直观,答辩时也容易讲清楚。注意这里userMapper的方法在 XML 里要有对应的 SQL,如果你改字段名,比如从openid改成open_id,一定要同步改 XML 里的#{openid}。

4.3 商品列表的加载更多:分页参数和后端 PageHelper

花店首页的商品列表一般不会一次全查出来,常见做法是页面上保留一个"上拉加载更多",触底时请求下一页,热词里经常提到的"微信小程序页面列表加载更多"就是这个东西。前端用onReachBottom生命周期触发下一页,后端用 PageHelper 或手写LIMIT分页。

小程序端的列表容器一般长这样:

// pages/index/index.js let currentPage = 1; const pageSize = 10; let noMore = false; Page({ data: { products: [], loading: false }, onLoad() { this.loadProducts(true); }, onReachBottom() { if (!this.data.loading && !noMore) { this.loadProducts(false); } }, async loadProducts(reset) { if (this.data.loading) return; this.setData({ loading: true }); if (reset) { currentPage = 1; noMore = false; } const list = await request('/products?page=' + currentPage + '&size=' + pageSize, 'GET'); this.setData({ products: reset ? list : this.data.products.concat(list), loading: false }); if (list.length < pageSize) { noMore = true; } else { currentPage += 1; } } });

这里的关键是reset参数:下拉刷新时传true,重置页面和数据;触底加载时传false,追加数据。noMore标志位防止已经没数据了还在不停发请求。后端的接口要支持page和size参数,返回的是一个数组。如果返回的是{ list: [], total: 100 }结构,前端取数的地方也要对应改。后端用 PageHelper 时注意第几页从 1 开始,前端传 1,后端PageHelper.startPage(page, size)即可。

4.4 下单流程:从购物车到订单的后端事务和前端状态同步

花店的购物车转订单是核心场景,流程是:用户勾选购物车条目 → 点击结算 → 创建订单 → 扣库存 → 返回订单号 → 跳转支付页面。这个流程里最怕的是"订单创建了但库存没扣"或"库存扣了但订单没生成",所以后端要用事务把这些操作包起来。在 Spring Boot 里就是给createOrder方法加@Transactional注解。

我见过一些毕设代码没有事务,下单接口只插入订单,不管库存,结果商品卖超了。你要在答辩时圆这个场,最好理解事务的ACID并能在源码里指出来。下单接口的参数一般是一个用户 ID 和购物车 ID 列表,后端先查商品价格,计算总价,插入订单主表,再插入订单明细表,最后扣减商品库存。任何一步失败,事务回滚,前端收到错误提示,购物车不会消失。

前端提交后要处理的是订单状态刷新:创建成功后不能默认支付成功,要跳到支付页面,支付页可以做成"模拟支付",点按钮后调一个/api/pay接口把订单状态改成已支付。这里要注意,小程序端支付必须要微信支付商户号,毕设里模拟支付是常态,但你得在答辩时解释清楚:真实场景是调wx.requestPayment,而这里为了演示简化了。

5. 避坑清单:花店小程序从"能启动"到"能演示"的 5 个高频故障

下面这 5 个问题是我基于同类项目经验整理的排查顺序,按出现概率从高到低排列。每个问题都按"现象 → 原因 → 解决"来写,你可以直接当查错手册用。

5.1 MySQL 连接报错SSL connection error或者Public Key Retrieval is not allowed

现象:后端启动时控制台一大串红字,包含SSL connection error,或者连接池初始化失败。

原因:MySQL 8.0 默认使用caching_sha2_password认证,并且服务端默认开启 SSL。你用的 JDBC 驱动版本较老,或者连接串里没有指定allowPublicKeyRetrieval=true,就会在连接阶段失败。

解决:把数据源 URL 改完整,写成jdbc:mysql://localhost:3306/flower_shop?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai。allowPublicKeyRetrieval=true是 MySQL 8.0 连本机时常需要的参数,加上之后重启后端,问题就没了。

5.2 小程序页面一直转圈,控制台报request:fail或url not in domain list

现象:首页商品列表加载不出来,转圈几秒后提示"网络请求失败"。开发者工具控制台能看到request:fail。

原因:默认情况下,微信小程序只能请求已配置合法域名的 HTTPS 接口。你本地开发用的是http://localhost,当然不在白名单里。

解决:开发阶段在微信开发者工具的"详情 → 本地设置"里勾选"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"。如果你在真机预览,也要在手机上打开调试模式。还有一个冷门坑:某些基础库版本里,勾选不校验域名后要重新编译才生效,记得点一下"编译"按钮。

5.3 真机预览连不上本地后端,but 开发者工具一切正常

现象:小程序在开发者工具里很流畅,但手机上打开后,商品列表空白,接口全部失败。

原因:手机访问localhost指的是手机自己,不是你的电脑。开发工具能通是因为它运行在你的电脑上,真机不行。

解决:把前端BASE_URL改成电脑的局域网 IP,比如http://192.168.1.100:8080/api。同时保证手机和电脑在同一个 WiFi 下,并关闭电脑防火墙对 8080 端口的拦截。Windows 上可以用"允许应用通过防火墙"来放行 Java 进程,或者临时关闭防火墙测试。另外提醒一句,电脑的 IP 地址在命令行里用ipconfig(Windows)或ifconfig(macOS/Linux)查。

5.4 商品图片不显示,控制台显示图片 404 或空白

现象:商品列表能请求下来,但图片位置是灰块。点开图片地址在浏览器里访问,要么 404,要么路径不对。

原因:数据库里image字段存的是相对路径,比如images/rose.jpg,而前端直接src={{item.image}},于是小程序尝试访问http://localhost:8080/api/image/...,但静态资源实际在机器的其他目录,或者后端没有配置静态资源映射。

解决:先看后端有没有把上传目录或图片目录映射成静态资源路径。Spring Boot 里常见配置是:

spring: web: resources: static-locations: file:/path/to/images/,classpath:/static/

如果只是毕设,你可以把图片放到小程序项目的assets目录下,然后把数据库里的路径改成/assets/rose.jpg,用本地图片绕过后端。这样虽然不规范,但演示时最省事。如果你想让后端出图,就把localhost:8080拼到图片地址前面,写成{{BASE_URL}} + item.image。

5.5 下单后订单状态没变,或者购物车数量不对

现象:点击"结算"后提示成功,但订单列表里看不到新订单;或者购物车里的商品数量显示异常。

原因:订单列表页的查询条件没传对,比如只查了"已支付",而新订单是"待支付";购物车数量变化是因为后端在创建购物车条目时没有去重,而是每次添加都插入一条新记录。

解决:先看后端订单列表接口是否支持按状态筛选,前端传参时带上当前选中状态。购物车的去重逻辑一般是在insert之前先查该用户、该商品是否已有记录,有则update quantity,没有才insert。你可以用 SQL 验证:

SELECT user_id, product_id, quantity FROM cart WHERE user_id = 1;

如果同一个用户和商品有多条记录,说明源码没做查重,需要你在 mapper 的 XML 里加一段SELECT COUNT(*)判断。

5.6 补充:顶部导航栏高度适配问题

热词里常看到"微信小程序顶部导航栏高度",这个在花店项目里也常见,比如自定义导航栏时。如果你没有做自定义导航栏,用的是系统原生导航栏,这个问题可以忽略。但如果你用了自定义导航栏,要计算状态栏高度:非 iPhone 是 20,iPhone X 以上是 44。小程序里可以用wx.getSystemInfoSync().statusBarHeight来获取。

如果你不想踩这个坑,我的建议是第一版先用系统导航栏,把商品详情页和下单页跑通,最后有余力再上自定义导航栏。自定义导航栏的成本不止高度,还要适配胶囊按钮位置,纯样式问题会消耗大量时间,不值当。

6. 最后一招:把毕设变成一个"能上手演示"的作品,真机预览与后端部署的验证方法

项目本地跑通只能算完成一半,真正能在答辩或给老师演示时撑住场面的,是手机真机上的完整流程。我用这一类项目做验收时,永远按一条主链路走:打开小程序 → 首页看到轮播图和商品列表 → 点击商品进详情 → 加入购物车 → 去结算 → 模拟支付 → 在订单列表中看到订单状态变化。这条链路每通过一步,就在纸上打一个勾,任何一步断了,优先查那一步的network请求和控制台报错。

如果手机和电脑在同一个局域网,最快的方式是小程序端BASE_URL改成电脑 IP,然后手机微信里打开开发者工具预览生成的二维码。这时要注意手机杀掉小程序再重新进入,因为wx.request的BASE_URL如果变了,旧的小程序实例可能还缓存着老地址。如果改了不生效,在手机微信小程序列表里删除后重新扫码。

如果想更进一步,把后端部署到一台云服务器,你需要处理数据库连接、安全组端口和静态资源路径。数据库一定不要用空格密码,连接串里的特殊字符会坑你,比如密码含@或#,URL 就要做编码。部署完成后用curl -X GET http://你的服务器IP:8080/api/products验证接口通不通,再让小程序端BASE_URL指向公网地址。

我自己的习惯是:每次改完配置,先用开发者工具把主链路跑通,再换真机跑一遍,最后才动部署。不要上来就搞反向代理和 HTTPS,微信小程序正式上线确实要求 HTTPS,但演示场景下内网 HTTP 完全够用。你要做的事是让评委看到"这个系统能正常用",而不是看到"这个系统配置了最全的中间件"。

关于调试,charles抓包工具确实能看小程序请求,但对于这个项目来说,开发者工具自带的 Network 面板已经够用。你只需要关心四个维度:请求 URL、请求方式、响应状态码、响应 Data。如果响应code不是 0,去看后端日志对应的方法抛出什么异常,多数是 SQL 语句错误或者参数没对上。我见过最搞笑的一次是前端把page参数拼成了pageNo,后端不识别,默认返回第一页,导致怎么滑都加载不出新数据——这种问题一抓包就现形,完全不用靠猜。

这套项目能带给你的不是"一个能交差的毕设"这么简单,而是让你经历一次完整的电商小程序前后端协作。你把它调通一遍后,再去接微信小程序相关的项目,像列表加载更多、登录鉴权、订单状态流转这些套路都会变成顺手的东西。花店项目虽然小巧,但该有的骨头都有。希望这篇笔记能帮你少走几步冤枉路,把源码包变成你自己的作品。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询