首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从 0 到上线:我用微信小程序云开发做了个"批改作业"工具(4 云函数 + 4 集合踩坑实录)#WorkBuddy#

从 0 到上线:我用微信小程序云开发做了个"批改作业"工具(4 云函数 + 4 集合踩坑实录)#WorkBuddy#

原创
作者头像
用户12731950
修改2026-09-01 22:09:07
修改2026-09-01 22:09:07
160
举报

从 0 到上线:我用微信小程序云开发做了个"批改作业"工具(4 云函数 + 4 集合踩坑实录)

一句话说清这个项目:学生拍照上传作业 → AI 自动批改 → 错题自动归档 → 家长/老师看统计,全程后端零服务器、零成本,全部跑在微信小程序云开发上。

目录

  • 一、为什么要做这个工具
  • 二、整体架构设计
  • 三、数据库集合设计(4 个)
  • 四、云函数实现(4 个)
  • 五、踩坑记录(重点,含解决方案)
  • 六、上线部署流程
  • 七、总结与数据

一、为什么要做这个工具

核心痛点很直接:老师批改作业太费时,学生订正后错题又容易散落各处、无法追溯。

我希望用一个小程序把这些环节串起来:

  1. 学生拍照上传作业图片;
  2. 后端调用 AI 完成批改,返回分数 + 逐题对错;
  3. 错题自动写入错题本(按知识点归类);
  4. 老师/家长随时看提交统计。

选微信小程序云开发的原因只有两个:不用买服务器、不用配域名和 HTTPS,写完直接部署上线。


二、整体架构设计

整个项目由 4 个云函数 + 4 个数据库集合构成,职责划分如下:

云函数

职责

login

静默登录,拿 openid,初始化用户

gradeAI

核心:接收作业图片,调用 AI 批改,返回分数与逐题结果

notify

批改完成后给用户推订阅消息

stats

聚合提交数、平均分、错题分布,返回给前端图表

数据库集合

存什么

users

用户资料(openid、昵称、角色:学生/老师/家长)

assignments

作业任务(题目、截止时间、发布人)

submissions

提交记录(图片、AI 批改结果、分数)

mistakes

错题本(按用户 + 知识点归档)

数据流一句话概括:

这套结构的好处是职责单一:每个云函数只干一件事,改起来互不影响,也方便单独调超时和权限。


三、数据库集合设计(4 个)

submissions(提交记录)为例,字段设计如下:

mistakes(错题本)的关键设计是冗余存储知识点标签,方便后面 stats 直接按标签聚合:

设计原则:读多写少的场景下,宁可冗余字段,也不要频繁跨集合 join。 小程序端查错题本一次 get 就够了。


四、云函数实现(4 个)

4.1 login —— 静默登录

4.2 gradeAI —— 核心批改(重点)

这里是整个项目最容易踩坑的地方,先说结论:AI 调用一定要放到云函数里做,且要处理超时

4.3 notify —— 订阅消息

批改完成后推一条「批改已完成」的订阅消息,核心是提前让用户授权,否则 subscribeMessage.send 会静默失败。

4.4 stats —— 数据统计


五、踩坑记录(重点,含解决方案)

这一节是我全程最值钱的部分——下面 6 个坑,每一个都踩过、都耗了我至少半小时。

坑 1:本地调试报「找不到云函数」

现象:开发者工具里右键云函数「上传并部署」成功后,本地运行还是报 function not found。

原因project.config.jsoncloudfunctionRoot 没指向正确的函数目录,或者上传的是别的目录。

解决

确认函数目录名和「云开发控制台」里显示的名字完全一致

坑 2:数据库权限默认「仅创建者可读写」,别人读不到

现象:学生 A 提交后,老师端查不到数据。

原因:集合默认权限是「仅创建者可读写」,跨用户读取直接返回空。

解决:在云开发控制台 → 数据库 → 对应集合 → 权限设置,改成自定义安全规则,例如提交记录允许同一条记录被指定角色读取:

坑 3:AI 批改接口超时

现象:批改图片稍微大一点就报错,前端一直转圈。

原因:云函数默认超时时间只有 3 秒,AI 批改通常要 5~15 秒。

解决:在云开发控制台把 gradeAI 函数的超时时间调到 20 秒(可在 config.json 里配 "timeout": 20)。

坑 4:多个云环境,环境 ID 写错

现象:代码明明对,数据却总写到另一个环境去了。

原因:开发环境 / 生产环境 ID 混淆,wx.cloud.init({ env: 'xxx' }) 传了错的 env。

解决:云函数里统一用 cloud.DYNAMIC_CURRENT_ENV(当前环境),小程序端用 wx.cloud.init({ env: '真实环境ID' }),并在 .env 或常量里集中管理,别散落硬编码。

坑 5:图片不压缩,上传又慢又费流量

现象:手机原图 3~5 MB,上传慢、AI 识别也慢。

解决:上传前用 wx.compressImage 压缩到 1 MB 以内,再 wx.cloud.uploadFile。质量和速度兼得。

坑 6:订阅消息静默失败,一条都发不出去

现象:代码没报错,但用户就是收不到通知。

原因subscribeMessage.send 前用户没有授权订阅,或者模板字段类型对不上。

解决:提交流程里先 wx.requestSubscribeMessage 让用户点同意;模板字段类型要严格按模板(thing / number / date 等)填,不能混。


六、上线部署流程

  1. 微信开发者工具 → 右上角「上传」,填版本号和备注;
  2. mp.weixin.qq.com 小程序后台 → 版本管理 → 把刚上传的版本设为「体验版」;
  3. 邀请几个真实用户(老师/学生/家长)扫码体验,走一遍完整流程;
  4. 确认无误后点「提交审核」,等审核通过再「发布」。

七、总结与数据

这个小程序从想法到上线,全程我一个人完成,后端零服务器成本,只靠微信云开发就撑起了完整闭环:

  • 4 个云函数:登录、AI 批改、通知、统计,职责清晰;
  • 4 个集合:用户、作业、提交、错题,读写分离;
  • 最核心的体会有两句:一是 AI 调用放云函数、超时务必调大;二是数据库权限别用默认值。

如果你也在做类似的小工具,强烈建议从「先跑通一个最小闭环(上传 → 批改 → 入库)」开始,再逐步加通知和统计,能少走很多弯路。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 从 0 到上线:我用微信小程序云开发做了个"批改作业"工具(4 云函数 + 4 集合踩坑实录)
    • 目录
    • 一、为什么要做这个工具
    • 二、整体架构设计
    • 三、数据库集合设计(4 个)
    • 四、云函数实现(4 个)
      • 4.1 login —— 静默登录
      • 4.2 gradeAI —— 核心批改(重点)
      • 4.3 notify —— 订阅消息
      • 4.4 stats —— 数据统计
    • 五、踩坑记录(重点,含解决方案)
      • 坑 1:本地调试报「找不到云函数」
      • 坑 2:数据库权限默认「仅创建者可读写」,别人读不到
      • 坑 3:AI 批改接口超时
      • 坑 4:多个云环境,环境 ID 写错
      • 坑 5:图片不压缩,上传又慢又费流量
      • 坑 6:订阅消息静默失败,一条都发不出去
    • 六、上线部署流程
    • 七、总结与数据
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档