设计后端逻辑功能
设计完界面后,需要完善相应的功能。初步尝试:1、登录;2、上传、加载分享信息两个功能
云函数设计
这里需要用到小程序的云开发功能,涉及到数据库、云函数等
首先设计云函数,这里创建三个云函数:1、login;2、downloadShare;3、uploadShare;分别用于登录、上传分享信息、加载分享信息。
函数按照功能大致分为
- 登录
- 上传分享
- 加载分享
- 获取收藏
- 上传收藏
- 删除收藏
登录函数
首先是登录函数如下:
exports.main = async(event, context) = { // 获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件) const wxContext = cloud.getWXContext() const db = cloud.database() const users = db.collection("user") const user = await users.where({ openid:wxContext.OPENID }).get() if(user.data.length==0)//判断是否存在这个用户,如果不存在,那么创建一个 await users.add({ data: { openid: wxContext.OPENID, favourites: [{}] }, success(res) { console.log(res) } }) return { user, openid: wxContext.OPENID, appid: wxContext.APPID, unionid: wxContext.UNIONID, }}需要注意的是这里在main后面加上了‘async’,作为一个异步调用函数,然后在判断语句那里加入‘await’,让函数等待结果,不加的话在动作完成前函数就会结束,插入数据就会失败。
上传分享
主要代码如下:
exports.main = async (event, context) = { const wxContext = cloud.getWXContext() const db = cloud.database() const shares = db.collection("shares") return await shares.add({ data:{ name:event.name, url:event.url, imgpath:event.imgpath, date:db.serverDate(), openid:wxContext.OPENID }, success(res){ console.log(res) } })}约定的格式是用户的openid、歌曲的name、歌曲图片imgpath、播放链接url。这里用的添加函数要求用data字段把数据包含起来。
加载分享
主要代码:
exports.main = async (event, context) = { const wxContext = cloud.getWXContext() const {id} = event const db = cloud.database() // 先取出集合记录总数 const countResult = await db.collection('shares').count() const total = countResult.total // 计算需分几次取 const batchTimes = Math.ceil(total / 100) // 承载所有读操作的 promise 的数组 const tasks = [] for (let i = 0; i batchTimes; i++) { const promise = db.collection('shares').where({ openid:wxContext.OPENID }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get() tasks.push(promise) } // 等待所有 return (await Promise.all(tasks)).reduce((acc, cur) = ({ data: acc.data.concat(cur.data), errMsg: acc.errMsg, })) return { share }}这里参考的是官网的例子,稍作更改。只需要获取用户的openid就可以得到该用户的分享。













