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

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'

})

})

}

相关推荐
克里斯蒂亚诺更新1 小时前
微信小程序调用腾讯地图路线规划-注意点
微信小程序·小程序
婷婷_1721 小时前
【PCIe 验证每日学习・Day22】PCIe 拓扑结构与 Switch / 桥片转发全解析
网络·学习·程序人生·芯片·pcie·pcie学习·pcie 拓扑
落痕的寒假1 小时前
[深度学习] 大模型学习7-多模态大模型全景解析
人工智能·深度学习·学习
墨^O^2 小时前
进程与线程的核心区别及 Linux 启动全过程解析
linux·c++·笔记·学习
寒秋花开曾相惜2 小时前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
charlie1145141912 小时前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(4)从零构建 STM32 构建系统
linux·开发语言·c++·stm32·单片机·学习·嵌入式
AI成长日志2 小时前
【笔面试算法学习专栏】双指针专题:简单难度三题精讲(167.两数之和II、283.移动零、344.反转字符串)
学习·算法·面试
AnalogElectronic2 小时前
uniapp学习6,滚动字幕播报
javascript·学习·uni-app
phoenixlxl3 小时前
allegro导出焊盘
学习
艾莉丝努力练剑3 小时前
【Linux信号】Linux进程信号(下):可重入函数、Volatile关键字、SIGCHLD信号
linux·运维·服务器·c++·人工智能·后端·学习