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

news/2024/7/20 4:18:49 标签: 微信小程序, 学习, 小程序

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'

      })

    })

  }


http://www.niftyadmin.cn/n/5258187.html

相关文章

Kubernetes实战(十三)-使用kube-bench检测Kubernetes集群安全

1 概述 在当今云原生应用的开发中,Kubernetes已经成为标准,然而,随着其使用的普及,也带来了安全问题的挑战。本文将介绍如何使用kube-bench工具来评估和增强Kubernetes集群的安全性。 2 CIS (Center for Internet Security)简介…

山海鲸可视化软件:打破数据孤岛,支持多种数据源连接

在之前的文章中为大家介绍了山海鲸可视化软件的主要应用场景,那么作为山海鲸可视化软件的开发者,我希望大家能更全面的了解我们这款免费的数字孪生软件,从而轻松上手。本文从数字孪生第一步接入数据开始为大家介绍一下山海鲸可视化软件支持的…

CentOS8 安装 RabbitMQ【纯安装手册】

安装步骤 准备环境 安装erlang 安装RabbitMQ 版本说明 erlang:25.1.2 RabbitMQ:3.11.6 版本对照表 操作步骤 注意:以下的命令都是用root用户操作的 环境配置 下载Centos-8.repo ### 选择其中一种方式即可# wget wget -O /etc/yum.rep…

钡铼技术R10工业路由器在停车场管理系统中的应用

随着城市化的进程,停车难问题日益突出,如何高效地管理和控制停车场成为城市管理者面临的挑战。而钡铼技术有限公司的R10工业路由器作为一种高性能、多功能的网络设备,在停车场管理系统中的应用发挥了重要作用。本文将介绍R10工业路由器的基本…

pyspark on yarn

背景描述 pyspark 相当于 python 版的 spark-shell,介于 scala 的诡异语法,使用 pyspark on yarn 做一些调试工作还是很方便的。 配置 获取大数据集群配置文件。如果是搭建的 CDH 或者 CDP 可以直接从管理界面下载配置文件。直接下载 hive 组件的客户端…

ArkTS编译时遇到arkts-no-obj-literals-as-types错误【Bug已解决-鸿蒙】

文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2此Bug解决方案总结项目场景: 在开发鸿蒙项目过程中,遇到了arkts-no-obj-literals-as-types,总结了自己和网上人的解决方案,故写下这篇文章。 遇到问题: rkTS编译时遇到arkts-no-obj-literals-as-type…

go-libp2p-example-chat学习

1.案例下载 https://github.com/libp2p/go-libp2p/tree/master/examples 2.chat案例 这段代码是一个简单的基于libp2p的P2P聊天应用程序的示例。它允许两个节点通过P2P连接进行聊天。前提是: 两者都有私有IP地址(同一网络)。至少其中一个…

关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明

问题来源: 1.关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明 说明: 1.最近npm、unpkeg都访问异常,可能是unpkg.com等国外的服务器不稳定导致的请求未响应。 解决方案: 1.请切换静态文件引入的方式请求相关资源。参…