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

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'

})

})

}

相关推荐
复业思维2024010813 小时前
Altium Designer (24.2.2)中更改库以及保持器件参数不变
笔记·学习·硬件工程
德育处主任13 小时前
在小程序做海报的话,Painter就很给力
前端·微信小程序·canvas
巧克力味的桃子13 小时前
进制转换3 学习笔记
笔记·学习
Purple Coder13 小时前
人工智能学习路线
学习
小帅学编程13 小时前
Spring(侧重注解开发)
java·学习·spring
爱喝水的鱼丶14 小时前
SAP-ABAP:在SAP世界里与特殊字符“斗智斗勇”:一份来自实战的避坑指南
运维·服务器·数据库·学习·sap·abap·特殊字符
科技林总14 小时前
【系统分析师】认证介绍
学习
不吃橘子的橘猫14 小时前
NVIDIA DLI 《Build a Deep Research Agent》学习笔记
开发语言·数据库·笔记·python·学习·算法·ai
低代码布道师14 小时前
互联网医院17:架构重构——医生档案的“独立宣言”
低代码·小程序·云开发
宁夏雨科网14 小时前
手机数码小程序商城自己能否独立开发
小程序·商城小程序·制作小程序·手机数码