做一个小程序

Posted on

迫于浙江工业大学的容大后勤服务仅提供了宿舍剩余电量查询,却没有余额过低时主动提醒的功能,就整了个小程序方便一下。

先放图

小程序码

宿舍低电提醒

首页

个人中心

主要技术

小程序使用mpvue框架,前端用了vant-weapp组件库,全部后端服务都是腾讯的node.js 云开发(省钱又省心 真不错)。

架构设计

懒得作图了,就文字描述下各部分吧。

用户系统和鉴权

因为几乎所有服务都是直接调云函数,有小程序天然鉴权,直接云函数里cloud.getWXContext()就完事了,不得不说这个云开发太香了。

表结构设计

小程序云开发的数据库似乎是魔改的MongoDB,这还是第一次接触文档型数据库,感觉跟MySql各有优劣,用起来也是蛮香的。

用户表里只存了 openid、注册时间,也没打算获取用户头像昵称。

一个工具表,存了小程序提供的工具。主要字段:工具id,工具类型(比如数据更新监测型,或是其他的),关联的订阅消息模板id,是否开放是否展示出来。

用户-工具表,存了用户使用该工具时的配置信息(比如低电提醒工具就存宿舍位置),上次给该用户发送订阅消息的时间(用于免打扰),该模板剩余订阅次数(下面会说)。

公告表,就是存要展示哪些公告,查询的时候按发布时间降序,最新发布的展示在前面。

发送订阅消息

现在小程序只能发一次性的订阅消息(特殊行业除外),就是用户申请订阅一次指定消息模板,才能给用户发一条消息。不过测试了一下发现这个订阅是能累加的,且是长期有效的(据网上消息,未验证),所以数据库就存了下订阅次数,每次发消息减一下。

遇到的坑

就先记录一个坑吧:小程序云开发的函数如果需要调用类似发订阅消息这些的接口,需要在config.json声明权限。坑的地方在于,例如我有一个发送订阅消息的sendMsg云函数(声明了发消息权限),再有一个检查宿舍电量余额的checkRoomStatus云函数(未声明发消息权限)来调用sendMsg,会提示没有接口调用权限。给checkRoomStatus也声明权限后,就能成功发送订阅消息了。这真是不好理解,难道云函数里调用另一个云函数的cloud.callFunction()有特殊优化(不同于小程序里的调用)?

碎碎念

这个博客荒这么久挺尬的,这期间倒也有计划了好几个主题,但网上一搜发现别人都写过了(关键写的还好……)。这次趁没返校折腾个小程序,写的过程中收获颇丰,就想写下来记录一下哈哈。溜了。

-END-