《微信小程序开发从入门到实战》学习四十九

4.5 实现投票小程序服务端功能

4.5.1 完成获取投票信息功能

修改pages/vote/vote.js文件中getVoteDataFromServer函数,代码如下:

getVoteDataFromServer(voteID) {

const db = wx.cloud.database()

db.collection('votes').doc(voteID).get().then(res => { // 根据投票ID获取投票信息

const voteData = res.data

const isExpired = this.checkExpired(voteData.endDate) //检查投票是否已经过期

this.setData({ // 将获取到的投票信息更新到data对象中

voteID,

type: voteData.type,

voteTitle: voteData.voteTitle,

voteDesc: voteData.voteDesc,

optionList: voteData.optionList,

endDate: voteData.endDate,

isAnonymous: voteData.isAnonymous,

isExpired

})

}).catch(res => {

console.error(res)

wx.showToast({

title: '获取投票失败',

icon: 'none'

})

})

}


实现getVoteStatusFromServer功能,需要知道openid,小程序端无法获取当前用户的openid,因此需要借助云函数实现。首先在新建一个名为getVoteStatus的云函数目录,该目录下的index.js代码如下:

// 云函数入口文件

const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

const db = cloud.database()

// 云函数入口函数

exports.main = async (event, context) => {

const wxContext = cloud.getWXContext()

const openid = wxContext.OPENID // 获取用户的openid

/**

* 根据投票ID获取投票记录

* 使用await关键字可以直接获取Promise过程中then函数中的res的值

* await关键字必须在被声明为async的函数中使用

*/

const res = await db.collection('votes').doc(event.voteID).get()

const optionListLength = res.data.optionList.length // 获取投票选项的个数

const voteLsit = res.data.voteLsit // 获取所有用户的投票列表

const alreadyVoted = checkAlreadyVoted(voteList, openid)

const totalVoteCount = getTotalVoteCount(voteList)

const optionStatus = getOptionStatus(voteList, openidd, optionLength)

return {

event,

openid: wxContext.OPENID,

appid: wxContext.APPID,

unionid: wxContext.UNIONID,

alreadyVoted, //当前用户是否已经投票

totalVoteCount, //总投票数量

optionStatus //每个选项的投票情况

}

}

function checkAlreadyVoted(voteList, openid){}

function getTotalVoteCount(voteList){}

function getOptionStatus(voteList, openidd, optionLength){}


三个计算函数下次补上。

最后在小程序端调用云函数的代码,将getVoteStatusFromServer函数修改为以下代码:

getVoteStatusFromServer(voteID){

wx.cloud.callFunction({

name: 'getVoteStatus',

data: {

voteID

}

}).then(res => {

console.log(res)

this.setData({

voteStatus: res.result

})

}).catch(res => {

console.error(res)

wx.showToast({

title: '获取投票数据失败',

icon: 'none'

})

})

}

相关推荐
千里马学框架8 分钟前
跟着google官方文档学习车载音频Car audio configuration
学习·configuration·音视频·aaos·安卓framework开发·audio·车机
棒棒的唐19 分钟前
微信小程序右上角分享按钮如何根据用户登录状态确定是否允许分享
微信小程序·小程序
代码游侠23 分钟前
ARM嵌入式开发代码实践——LED灯闪烁(C语言版)
c语言·开发语言·arm开发·笔记·嵌入式硬件·学习
2501_915921431 小时前
iOS 描述文件制作过程,从 Bundle ID、证书、设备到描述文件生成后的验证
android·ios·小程序·https·uni-app·iphone·webview
小白学大数据1 小时前
基于 Python 的知网文献批量采集与可视化分析
开发语言·爬虫·python·小程序
毕设源码-郭学长1 小时前
【开题答辩全过程】以 基于微信小程序的医院管理系统为例,包含答辩的问题和答案
微信小程序·小程序
好奇龙猫1 小时前
【人工智能学习-AI入试相关题目练习-第八次 】
人工智能·学习
saoys1 小时前
Opencv 学习笔记:手动绘制彩色图像的 RGB 通道直方图
笔记·opencv·学习
薛不痒1 小时前
项目:矿物分类(训练模型)
开发语言·人工智能·python·学习·算法·机器学习·分类
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 基于微信小程序的医疗物资进销存管理为例,包含答辩的问题和答案
微信小程序·小程序