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

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'

})

})

}

相关推荐
wangqiaowq10 小时前
Ontology 学习
学习
choumou_M12 小时前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
CSharp精选营12 小时前
记一次家庭物品管理的折腾:从“收纳”到“可检索”
微信小程序·aicoding·屋册有序·物品收纳管理·家庭收纳管理工具
蒸蒸yyyyzwd17 小时前
后端学习笔记 day111
笔记·学习
叼烟扛炮17 小时前
[LangChain] 学习笔记(08):工具调用底层闭环与第三方搜索(Tavily)实战
人工智能·笔记·学习·langchain
Century_Dragon18 小时前
让新能源故障诊断实训“触手可及“——仿真教学软件(VR)介绍
学习
楚山之石18 小时前
【Radiology】影像组学的标准化与可重复性:IBSI 卷积滤波器共识及其未能覆盖的环节
人工智能·学习·机器学习·mri
小李不想当小白19 小时前
HAL库之UART(STM32 HAL库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
旖旎夜光20 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
旖旎夜光21 小时前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习