certificate-photo 定时触发器实战:临时文件清理、壁纸拉取、背景轮换的配置指南
【免费下载链接】certificate-photo一个生成证件照的小程序,微信云原生开发小程序。 只fork不star是很没品的。项目地址: https://gitcode.com/gh_mirrors/ce/certificate-photo
certificate-photo 是一款基于微信云开发(CloudBase)构建的证件照生成小程序,它的厉害之处在于:临时文件清理、壁纸拉取、背景轮换这些重复性运维工作,全靠内置的定时触发器自动完成,无需人工干预。本文带你逐一定位这些定时云函数,看懂它们的 cron 配置与运行逻辑,并附上可直接照抄的配置清单,帮你快速掌握微信小程序定时任务的配置方法。
一、什么是微信小程序定时触发器
在微信云开发中,定时触发器就是给云函数配置的一个"闹钟"。你只需在云函数目录下的config.json里声明triggers字段,云平台就会按照 cron 表达式周期性地调用该云函数,非常适合做定时清理、定时拉取、定时推送这类后台任务。
{ "triggers": [ { "name": "timingDelete", "type": "timer", "config": "0 */30 * * * * *" } ] }certificate-photo 全项目共部署了 3 个核心定时触发器,接下来逐一拆解。
二、certificate-photo 定时触发器全景一览
| 云函数 | 触发频率 | 职责 |
|---|---|---|
timingDelete | 每 30 分钟 | 清理过期临时图片文件 |
timingGetImage | 每 30 分钟 | 拉取壁纸图并写入数据库 |
timingUpdateBgListIndex | 每天零点 | 推进首页背景轮换索引 |
三者协同,构成了小程序"自动清理 + 自动补图 + 每日换背景"的完整闭环。
三、临时文件清理定时触发器:timingDelete 配置指南
文件位置:cloudfunctions/timingDelete/index.js与config.json
用户生成证件照时会先在云端产生大量临时图片,如果不清理,云存储费用会持续上涨。timingDelete的清理策略非常清晰:
- 计算一小时前的毫秒时间戳;
- 查询
tmp-file集合中time小于该时间戳的记录(limit(50)防止单次处理过多); - 用
cloud.deleteFile删除云存储里的真实文件; - 同步删除数据库中对应的记录。
const time = Date.now() - 1000 * 60 * 60 const { data: list } = await tmpFiles.where({ time: _.lt(time) }).limit(50).get() const { fileList: resultList } = await cloud.deleteFile({ fileList })触发配置为"0 */30 * * * * *",即每 30 分钟执行一次。这个频率保证了"过期一小时"的图片最迟半小时内就会被清掉,兼顾了清理及时性与 API 调用成本。
四、壁纸拉取定时触发器:timingGetImage 配置指南
文件位置:cloudfunctions/timingGetImage/index.js与config.json
证件照生成需要丰富的背景素材。timingGetImage通过环境变量IMAGE_API(风景图接口)和MEINV_IMAGE_API(示例图接口)定时拉取图片:
- 调用接口拿到图片 URL;
- 风景图写入
bg-images集合,供背景轮换使用; - 示例图写入
images集合,供人像抠图等场景共享。
const imgApi = process.env.IMAGE_API const meinvImgApi = process.env.MEINV_IMAGE_API它的触发频率同样是每 30 分钟一次,这样背景库能持续补充新图。配置要点:部署前记得在云开发控制台为该云函数配置好环境变量,否则接口地址为空,拉取会失败。
五、背景轮换定时触发器:timingUpdateBgListIndex 配置指南
文件位置:cloudfunctions/timingUpdateBgListIndex/index.js、cloudfunctions/getTodayBgList/index.js
背景每天轮换,靠的是一个"索引游标"机制:
timingUpdateBgListIndex每天零点执行(cron 为"0 0 0 * * ? *"),读取global-config中的bgListIndex,将其加 4;如果超过背景总数则归零;- 前端调用
getTodayBgList时,依据bgListIndex用skip跳过对应位置,再limit(4)取出 4 张当日背景图。
let index = data.bgListIndex + 4 if (index >= total) { index = 0 }这样每天首页展示的背景都会顺移 4 张,形成"每日换新"的轮换效果,用户每次打开小程序都有新鲜感。
六、定时触发器 cron 表达式速查
微信云开发的 timer 触发器采用 7 位 cron 格式,含义依次为:秒 分 时 日 月 周 年。常见写法参考:
| 需求 | cron 表达式 |
|---|---|
| 每 30 分钟执行一次 | 0 */30 * * * * * |
| 每天零点执行 | 0 0 0 * * ? * |
| 每天凌晨 3 点执行 | 0 0 3 * * ? * |
| 每周一 9 点执行 | 0 0 9 ? * 1 * |
注意:普通 5 位 cron(如0 0 * * *)在云开发里并不合法,必须补足 7 位,这是新手最容易踩的坑。
七、定时触发器配置常见问题
1. 触发器不生效怎么办?检查config.json是否已随云函数一起上传部署。修改触发器后需要重新部署云函数,配置才会更新到云端。
2. 删除文件报错 -503003?这是"文件不存在"的状态码,timingDelete已做了兼容处理:删除成功和文件已不存在的记录都会被清理出数据库,不会留下脏数据。
3. 如何调整清理频率?直接修改config.json中triggers[0].config的 cron 值即可,例如想改为每小时清理,可写成0 0 * * * * *。
八、总结
通过 certificate-photo 的这三个定时触发器示例,你可以看到:临时文件清理控制云存储成本,壁纸拉取保障素材供给,背景轮换提升用户体验。三者都用最简洁的 cron 配置驱动,逻辑清晰、可直接复用。下次当你需要为自己的小程序加一个定时任务时,不妨参照这套配置方案,十分钟就能跑起来。
【免费下载链接】certificate-photo一个生成证件照的小程序,微信云原生开发小程序。 只fork不star是很没品的。项目地址: https://gitcode.com/gh_mirrors/ce/certificate-photo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考