想法
直接使用view等原生代替canvas进行渲染,方便用户操作,只在最后导出图片时才渲染canvas。或者每次修改渲染隐藏canvas。 以此减少交互和适配成本。
公开预览图配置
预览图和固定字体的公开地址统一配置在 miniprogram/config/assets.ts:
publicDomain: 'https://cdn.joeyone.cn',
keyPrefix: 'doodle-assets/',
首页预拉取、旧 pageConfig 缓存、新后端动态兜底,以及年龄推荐、收藏、下载记录和内容管理页的旧预览图,展示前统一通过 resolvePreviewUrl 转成七牛地址。旧云存储临时链接也会转换并去掉旧签名;其他环境、外部图片、本地图片和头像不参与此次预览图替换。分类页继续使用新后端返回的七牛地址。重新编译小程序即可使用,无需手工清除 pageConfig 缓存。
cache/page-config.json 中的 34 处预览引用已替换。兼容逻辑不修改线上云数据库、云函数或已上传的配置 JSON;旧数据由客户端读取时转换。新的预览上传由管理员上传接口写入七牛,再以 ready 资产 ID 发布元数据。
运行预览图回归测试:npm run test:assets;分类页回归:npm run test:category。
新后端静默登录与鉴权
启动及回到前台时通过 utils/auth.ts 非阻塞预热:wx.login 取一次性 code,调用 POST /api/v1/auth/wechat/login。首次使用 start,已有会话续期和 401 恢复使用 resume;明确无效 code 最多重新取一次。JWT 与用户摘要按 AppID、接口地址分开保存,凭证到期前 60 秒按需续登。不缓存角色或微信 OpenID,不记录凭证、code 或完整登录响应。
统一请求层 services/api-request.ts 默认要求登录并携带 Bearer;公开分类与题型接口显式指定 auth: 'none',不携带凭证、不触发登录。受保护请求遇到可恢复 401 时最多重登并重发一次,并发请求合并登录,迟到的旧 401 不会清掉新凭证。恢复后身份变化时不补发原业务写入。403、限流、服务错误或网络失败不触发自动重登链。
import { apiRequest } from './services/api-request';
import { getUser, refreshUser } from './utils/auth';
// 获取新后端用户摘要;必要时静默登录。
const user = await getUser();
// 受保护的 GET /me,读取最新资料;不会先清掉有效凭证。
await refreshUser();
// 新增本人业务接口默认使用统一鉴权;公开接口显式 auth=none。
await apiRequest('/me');
账户不存在或禁用时停止自动恢复,不自动切回 start 重建账户;账户历史标记保留在同一个版本化缓存中。个人中心仅在需要用户主动重新开始时显示“开始使用账户”。登录失败不阻塞公开浏览、本地生成和导出。
用户资料、头像上传、收藏、下载记录和账户设置现已全部使用新后端及 globalData.user,旧登录兼容层已移除。界面保留少量 _id 展示字段映射,来源始终是新后端 ID,不再调用旧云业务。正式环境切换前仍需单独迁移历史用户及关联数据,线上 API 地址当前仍待配置。
验证:npm run test:auth;联合回归可执行 node --import tsx --test tests/auth-api.test.mjs tests/category-api.test.mjs tests/preview-assets.test.mjs。微信兑换在测试中使用模拟响应,真实一次性 code 需要在微信开发者工具或真机联调;没有加入绕过微信验证的测试登录接口。
业务接口切换
本地开发中的小程序运行代码已不再调用 wx.cloud;首页继续使用 wx.getBackgroundFetchData 获取预拉取首屏,在后台使用新 /page-config 刷新,管理改动也会刷新首页。旧云端的预拉取地址、生成与发布链路、定时任务保持原样,新管理开关仅控制新后端的快照刷新任务。
当前已发布的线上版仍使用旧云开发接口。cloudfunctions/ 中全部旧云函数源码、云开发配置及线上服务均须保留;本地开发版切换接口不代表线上旧版本已停止调用。未经另行明确安排,不删除、停用旧云函数,不改变其接口契约,不清理旧云数据库或云存储,也不迁移现有预拉取模式。
用户接口由 services/member-api.ts 与 utils/auth.ts 管理,管理页由 services/admin-api.ts 适配具名 REST 路由。图片通过本站 multipart 上传接口进入七牛,不暴露 AK/SK;同一次上传恢复沿用 UUID uploadId。管理页只能由数据库中当前角色为 admin 的账户操作,开发版不会绕过权限。
服务端路由、权限与数据迁移说明见 doodle-store 的 docs/v3.5/小程序云接口迁移清单.md。旧云端用户、收藏与下载历史本次未自动导入,正式切换前需要另行核对迁移。