小程序开发(用户界面与社区界面进度Ⅱ)(更新中)

设计后端逻辑功能

设计完界面后,需要完善相应的功能。初步尝试: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就可以得到该用户的分享。


获取收藏

上传收藏

删除收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值