certificate-photo 定时触发器实战:临时文件清理、壁纸拉取、背景轮换的配置指南
2026/8/21 14:27:08 网站建设 项目流程

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.jsconfig.json

用户生成证件照时会先在云端产生大量临时图片,如果不清理,云存储费用会持续上涨。timingDelete的清理策略非常清晰:

  1. 计算一小时前的毫秒时间戳;
  2. 查询tmp-file集合中time小于该时间戳的记录(limit(50)防止单次处理过多);
  3. cloud.deleteFile删除云存储里的真实文件;
  4. 同步删除数据库中对应的记录。
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.jsconfig.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.jscloudfunctions/getTodayBgList/index.js

背景每天轮换,靠的是一个"索引游标"机制:

  1. timingUpdateBgListIndex每天零点执行(cron 为"0 0 0 * * ? *"),读取global-config中的bgListIndex,将其加 4;如果超过背景总数则归零;
  2. 前端调用getTodayBgList时,依据bgListIndexskip跳过对应位置,再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.jsontriggers[0].config的 cron 值即可,例如想改为每小时清理,可写成0 0 * * * * *

八、总结

通过 certificate-photo 的这三个定时触发器示例,你可以看到:临时文件清理控制云存储成本,壁纸拉取保障素材供给,背景轮换提升用户体验。三者都用最简洁的 cron 配置驱动,逻辑清晰、可直接复用。下次当你需要为自己的小程序加一个定时任务时,不妨参照这套配置方案,十分钟就能跑起来。

【免费下载链接】certificate-photo一个生成证件照的小程序,微信云原生开发小程序。 只fork不star是很没品的。项目地址: https://gitcode.com/gh_mirrors/ce/certificate-photo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询