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

发布时间:2023年12月18日

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

4.5.2?完成获取投票信息功能

修改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?optionLength?=?res.data.optionList.length?//?获取投票选项的个数

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

??const?alreadyVoted?=?checkAlreadyVoted(voteList,?openid)

??const?totalVoteCount?=??getTotalVoteCount(voteList)

??const?optionStatus?=??getOptionStatus(voteList,?openid,?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,?openid,?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'

??????})

????})

??}

文章来源:https://blog.csdn.net/xy2937131682/article/details/134961764
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。