5.8 KiB
小程序分类页接入新后端
更新:2026-10-16。分类页已由旧 CloudBase 查询切换为 doodle-store 的公开 HTTP 接口;首页、微信登录、收藏、下载计数及其他页面仍使用原有云服务,本次不做双写或隐式数据同步。
全局配置
入口:miniprogram/config/api.ts。
| 配置 | 当前值 | 用途 |
|---|---|---|
| developmentEnvironment | local | 开发版选择 local 或 online |
| localBaseUrl | http://127.0.0.1:8800/api/v1 | 开发者工具连接本机后端 |
| onlineBaseUrl | 空串 | 线上地址待确定;填写完整 HTTPS 地址及 /api/v1 |
| timeout | 10000 | 请求超时,毫秒 |
环境通过 wx.getAccountInfoSync().miniProgram.envVersion 获取。develop 默认走 local,可以修改 developmentEnvironment 联调线上;trial、release 和未知版本只走 online。线上地址为空时明确显示“请先配置线上接口地址”,不会回退本地或云函数。该配置不保存 AppSecret、JWT 密钥或数据库凭据。
新后端请求统一使用 services/api-request.ts,分别校验 HTTP 状态、业务 code 和响应结构;services/content-api.ts 封装分类、完整题型分页与详情。旧 utils/http.ts 和旧云请求保留,以免影响其他页面。
如何切换接口环境
export const apiConfig = {
developmentEnvironment: 'local' as ApiEnvironment,
localBaseUrl: 'http://127.0.0.1:8800/api/v1',
onlineBaseUrl: '',
timeout: 10000,
};
- 开发版连接本地:将
developmentEnvironment设置为'local',在localBaseUrl中填写本地接口地址。 - 开发版连接线上:先填写
onlineBaseUrl,再将developmentEnvironment设置为'online'。 - 体验版、正式版:自动使用
onlineBaseUrl,不受developmentEnvironment影响。地址需要使用 HTTPS,并包含/api/v1;目前线上地址尚未确定,保持空串,确定后再填写。 - 手机测试本地服务:保持
'local',将localBaseUrl中的127.0.0.1改为电脑局域网 IP;同时将后端doodle-store/apps/server/.env中的HOST设置为0.0.0.0并重启后端。手机和电脑需在同一局域网。
修改后重新编译小程序即可。当前此配置用于已迁移的分类页,其他页面仍使用原云服务。
本地运行
- 在 doodle-store 执行
pnpm dev。实际apps/server/.env和缺省端口已改为 8800,默认 HOST 仍为 127.0.0.1。 - 浏览器访问
http://127.0.0.1:8800/api/v1/health或http://127.0.0.1:8800/api-docs。 - 微信开发者工具打开 doodle-mini,重新编译后进入分类页。本机
project.private.config.json的 urlCheck 已设为 false,公共 project.config.json 保持域名校验;私有配置覆盖公共配置。 - 真机测试时手机和电脑在同一局域网;后端 HOST 改为 0.0.0.0 并重启,将 localBaseUrl 的 IP 改为电脑局域网 IP,保留 8800 和 /api/v1。手机上的 127.0.0.1 指向手机自身。
开发者工具打开服务端口后才可使用微信官方 CLI 自动化。本机当前未开启该端口,本次没有修改 IDE 全局安全设置、上传代码或发布小程序。
分类页行为
- 分类导航读取 GET /categories,不再用写死目录决定上线状态;全部、热门推荐、下载最多是前端内置入口。现有后端目录包含 craft、不含 papers,页面按后端实际目录展示。
- GET /worksheets?page=1&pageSize=100,按 hasNext 继续读取,完整成功后才生成页面数据。分页变化、重复 ID 或缺页时展示重试,不返回局部榜单。
- 保留旧交互:全部及普通分类以 updatedAt 最近两条置顶,其余按下载数降序;热门推荐仍为收藏数前 12,下载最多为下载数前 12。前端“热门推荐”与服务端 sort=hot(下载热度)含义不同,因此不直接用后者替代。
- likes/downloads 已含展示 seed,保留十进制字符串;按字符串长度及字典序比较,不转换为 Number,不要求微信运行时支持 BigInt。
- previewImg 为空时显示所属分类图标;当前 51 张预览尚未迁移,不阻止题型数据展示。
- 每次 onShow 重新读取。加载失败清空旧数据,展示原因和“重新加载”;不恢复 category.data.ts、写死目录或旧云查询。
- 请求采用页面版本标记,旧请求或离开页面后的响应不会覆盖新数据。已下架的默认分类回到“全部”。
- 点击题型先查询 GET /worksheets/:id,再使用当前服务端 path 跳转;404 时刷新列表,网络失败不直接进入内置生成页。通过分享或其他页面直接进入生成页的访问检查另行迁移,不能只凭分类页迁移认定全站均受新后端发布控制。
验证
npm run test:category 运行环境切换、请求失败、121 条完整分页、分页变化、64 位计数、服务端目录、空图、页面重试、过期响应和点击下架检查。TEST_LOCAL_API=1 npm run test:category 额外连接真实本地 8800 服务。
本次 9 项含真实接口的测试全部通过,读取 6 个分类及 51 个题型,卡片数据及点击详情正常。小程序全量 TypeScript 检查原有 117 条报错仍存在,修改前后结果一致,本次相关文件无新增错误。后端 pnpm check 通过。微信开发者工具模拟器的实际编译/显示尚未通过 CLI 验证(服务端口关闭),不能把脚本联调等同于真机验收。