微信云开发之云函数小例子

news2025/1/18 9:57:57

环境

  • 微信开发者工具 Stable 1.06.2303220
  • 云开发控制台 v1.5.47

概述

云函数即在云端(服务器端)运行的函数,代码运行在云端Node.js中。我们可以使用云函数SDK中提供的数据库和存储API进行数据库和存储的操作。

云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。

准备

在微信开发者工具中,创建一个新项目 miniprogram-9 ,输入AppID,并选择“微信云开发”。

示例

示例1:Helloworld

右键单击 cloudfunctions ,选择“新建Node.js云函数”:

在这里插入图片描述

命名为“helloworld”,并回车,系统自动创建 helloworld 文件夹,以及 config.jsindex.jspackage.json 三个文件。

在这里插入图片描述

打开 index.js 文件,编辑如下:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return 'Hello world!'
}

右键单击 index.js ,选择“云函数增量上传:更新文件”。

注意:云函数是在后台工作的,所以每次修改完云函数,别忘了要上传一下,否则修改不起作用。

打开“miniprogram -> pages -> index -> index.wxml”,把内容全部清空,并添加如下内容:

<button type="primary" bindtap="getHelloworld">Hi</button>
<view>{{dataObj}}</view>

打开“miniprogram -> pages -> index -> index.js”,添加/修改如下内容:

  data: {
    dataObj: ""
  },

  getHelloworld() {
    wx.cloud.callFunction({
      name: 'helloworld'
    })
    .then(res => {
      console.log(res)
      this.setData({
        dataObj: res.result
      })
    })
  },

测试效果如下,当点击查询按钮时,就会显示“Hello world!”:

在这里插入图片描述

示例2:操作数据库

添加云函数 getData ,修改其 index.js 如下:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  return await db.collection('table0508').get()
}

编辑完后别忘了上传云函数。

修改 index.wxml 文件如下:

<button type="primary" bindtap="getData">查询</button>

<view wx:for="{{dataObj}}" wx:key="index">
  <view>{{index + 1}}:</view>
  <view>姓名:{{item.name}}</view>
  <view>性别:{{item.sex}}</view>
  <view>年龄:{{item.age}}</view>
  <view>功夫:{{item.kongfu}}</view>
  <text>\n\n</text>
</view>

修改页面的 index.js 文件内容如下:

......
  data: {
    dataObj: ""
  },

  getData() {
    wx.showLoading({
      title: '加载中……',
      mask: true
    })
    wx.cloud.callFunction({
      name: 'getData',
    })
    .then(res => {
      console.log(res.result.data)
      this.setData({
        dataObj: res.result.data
      })
      wx.hideLoading()
    })
  },
......

测试效果如下,当点击“查询”按钮时,就会从后台获取数据:

在这里插入图片描述

示例3:触底加载新数据

如果数据量较大,则没必要一次性取回所有数据,可以考虑逐步获取数据。设计思路是:首先在页面加载时( onLoad ),从后台取回一部分数据(比如第1到3条),然后当页面到达底部时( onReachBottom),从后台再取回一部分数据(比如第4到6条),以此类推。

添加云函数 getLimitedData ,修改其 index.js 如下:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  var limitNum = event.limitNum
  var skipNum = event.skipNum

  return await db.collection('table0508').limit(limitNum).skip(skipNum).get()
}

修改 index.wxml 如下:

<view wx:for="{{dataObj}}" wx:key="index" style="font-size:30px">
  <view>{{index + 1}}:</view>
  <view>姓名:{{item.name}}</view>
  <view>性别:{{item.sex}}</view>
  <view>年龄:{{item.age}}</view>
  <view>功夫:{{item.kongfu}}</view>
  <text>\n\n</text>
</view>

注:这里特意把字体设置的较大,以便3条记录就超过一屏(否则无法触发 onReachBottom 事件)。

修改页面的 index.js 文件内容如下:

......
  data: {
    dataObj: [] // 设置为数组,方便追加
  },
  
  getLimitedData(limitNum, skipNum) {
    wx.showLoading({
      title: '加载中……',
      mask: true
    })
    wx.cloud.callFunction({
      name: 'getLimitedData',
      data: {
        limitNum: limitNum,
        skipNum: skipNum
      }
    })
    .then(res => {
      var oldData = this.data.dataObj
      var newData = oldData.concat(res.result.data)

      console.log(res.result.data)
      this.setData({
        dataObj: newData
      })

      wx.hideLoading()
    })
  },

  onLoad: function (options) {
    this.getLimitedData(3, 0)
  },

  onReachBottom: function () {
    var skipNum = this.data.dataObj.length
    this.getLimitedData(3, skipNum)
  },

测试效果如下,当页面加载后,初始时会显示3条记录:

在这里插入图片描述

当页面滚动到底部时,就会触发获取更多记录:

在这里插入图片描述

当页面再次滚动到底部时,就又会触发获取更多记录,以此类推。

参考

  • https://www.bilibili.com/video/BV1MY411Y7Ak/?p=17&vd_source=2ec1bf89a54b0d3afd52d89760b0dd55
  • https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/523739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos,搭建ftp服务;vsftpd

安装vsftpd 使用yum安装vsftpd&#xff1a; yum install -y vsftpd 配置vsftpd 编辑vsftpd配置文件&#xff1a; vim /etc/vsftpd/vsftpd.conf 以下是一些常见的配置项&#xff1a; anonymous_enableNO local_enableYES write_enableYES local_umask022 dirmessage_enableYE…

职场新人必备:10个写进备忘录的职场tips

作为职场新人&#xff0c;如何快速适应、获得成长和提升自己&#xff0c;是每个人都面临的挑战。在这个竞争激烈的职场中&#xff0c;拥有一些实用的职场tips&#xff0c;可以帮助你更好地应对各种挑战&#xff0c;获得成功。在本文中&#xff0c;我们将分享10个写进备忘录的职…

es8388 驱动详解

音频的基本框架 分为三个部分&#xff1a; 1&#xff09; 整体的绿框&#xff0c;为machine&#xff0c;例如你的PC等&#xff0c;负责图中 “线”的部分的关联&#xff0c;及黄色连接器的管理。也就是说不属于 paltform和codec管理的部分&#xff0c;都划归machine管理。 对应…

【Python socket】零基础也能轻松掌握的学习路线与参考资料

Python socket是Python程序语言中与网络编程密切相关的库之一&#xff0c;可以让程序员在网络世界中建立服务和客户端之间的连接。Python socket提供了一系列关键的概念和方法&#xff0c;让用户能够轻松地构建基于网络的程序&#xff0c;如基于TCP和UDP的应用程序。学习Python…

图(Graph)

Graph 图由顶点&#xff08;vertex /ˈvɜːrteks/&#xff09;和边&#xff08;edge /edʒ/&#xff09;组成的一种结构。 顶点的集合V&#xff0c;边的集合是E&#xff0c;所以图记为G &#xff08;V&#xff0c;E&#xff09; 总结: 顶点是一维数组,而边是二维数组; 假如顶点…

Pycharm无法添加Conda新建的虚拟环境

Pycharm无法添加Conda新建的虚拟环境&#xff0c;点击没反应&#xff0c;在idea.log文件中报错&#xff1a;CondaPythonLegacy - Can’t find python path to use, will use conda run instead 1.问题描述&#x1f50d; 在PyCharm中&#xff0c;依次单击File>Settings>P…

Netty核心技术一--Netty介绍和应用场景

1. 学习要求 要求已经掌握了 Java 编程&#xff0c; 主要技术构成&#xff1a; Java OOP 编程、Java 多线程编程、JavaIO 编程 、Java 网络编程、常用的Java 设计模式(比如观察者模式&#xff0c;命令模式&#xff0c;职责链模式 )、常用的数据结构(比如 链表) 2 Netty的介绍…

C++: 计时器类的设计和实现

文章目录 1. 目的2. 功能列表3. 基础功能&#xff1a;获取耗时4. API 设计: Timer 类5. 单元测试6. API 实现 1. 目的 使用 C Class 的形式&#xff0c;封装原本 C语言的获取时间的函数&#xff0c;提供更容易使用的计时器调用。 使用 C03&#xff0c;原因是和先前的线程安全队…

ATT-ACK靶场渗透(一)

开启内网环境 kali攻击机ip为 192.168.88.156 主机发现、端口扫描 进行主机发现 nmap -sS 192.168.88.156/24 -Pn 192.168.88.1和192.168.88.2可能为网关之类的&#xff0c;不管 weblogic漏洞利用 192.168.88.182开放了80端口和7001&#xff08;weblogic&#xff09;端口…

超越预期:ConvNeXt技术催生YOLOv5目标检测巨变 ,实现超准确率

目录 引言一、ConvNeXt的介绍1、目标检测的重要性2、YOLOv5的介绍3、ConvNeXt原理和特点4、ConvNeXt结构 二、相关研究综述1、目标检测的基础原理和流程2、YOLOv5的特点与局限性3、ConvNeXt技术在目标检测中的应用现状 三、ConvNeXt在YOLOv5中的应用与改进1、安装PyTorch和torc…

阿里Java工程规约(来源阿里)

一、应用分层 1.开放接口层&#xff1a; 可直接封装 Service 接口暴露成 RPC 接口&#xff1b;通过 Web 封装成 http 接口&#xff1b;网关控制层等。 2.终端显示层&#xff1a; 各个端的模板渲染并执行显示层。当前主要是 velocity 渲染&#xff0c;JS 渲染&#xff0c;JSP 渲…

[golang gin框架] 33.Gin 商城项目- 微信支付操作相关功能讲解

一.微信支付准备工作 准备工作 申请条件: 个体工商户 、企业、政府及事业单位 PC网站接入支付官网,其他(app,小程序,公众号等)可参考 PC网站接入支付 需要获取内容 appid&#xff1a;应用 APPID&#xff08;必须配置&#xff0c;开户邮件中可查看&#xff09; MCHID&#xff1a…

Java Socket和ServerSocket 使用

在Java中&#xff0c;Socket和ServerSocket是用于创建网络连接的重要类。Socket类用于创建客户端套接字&#xff0c;而ServerSocket类用于创建服务器套接字。在本文中&#xff0c;我们将讨论Socket和ServerSocket的作用、使用方法以及相关代码示例。 Socket的作用 Socket是Jav…

【连续介质力学】张量的并矢和性质1

张量的代数操作 并矢 Dyadic 两个向量的张量积是一个并矢&#xff0c;得到一个二阶张量 u ⃗ v ⃗ u ⃗ ⨂ v ⃗ A \vec u \vec v \vec u \bigotimes \vec v A u v u ⨂v A 其中&#xff0c; ⨂ \bigotimes ⨂是张量乘积&#xff0c;任意张量可以表示成并矢的线性组合 …

戴尔 Dell XPS 13 7390电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板戴尔 Dell XPS 13 7390 处理器Intel Core i7-10510u已驱动 内存 16 GB ( 酷兽 DDR4 3200MHz 8GB x 2 )已驱动 硬盘三星 SSD 860 EVO 250GB (250 …

【iOS】--KVC与KVO

键值编码&#xff08;KVC&#xff09;与键值监听&#xff08;KVO&#xff09; KVC&#xff08;Key Value Coding&#xff09;允许以字符串的形式间接操作对象的属性。 简单的KVC 最基本的KVC由NSKeyValueCoding协议提供支持&#xff0c;最基本的操作属性的两个方法如下 set…

利用具有局部信息的引导自注意进行息肉分割

文章目录 Using Guided Self-Attention with Local Information for Polyp Segmentation摘要本文方法PP-Guided Self-AttentionLocal-to-Global Mechanism损失函数 实验结果 Using Guided Self-Attention with Local Information for Polyp Segmentation 摘要 背景 自动准确的…

Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能

随着互联网的不断发展&#xff0c;浏览器已经成为我们日常生活中必不可少的工具之一。作为一款现代化的浏览器&#xff0c;Microsoft Edge拥有许多强大的功能&#xff0c;为用户带来更加流畅的浏览体验。最近&#xff0c;Edge推出了分屏功能&#xff0c;这项功能可以大大提高生…

STM32------ADC

ADC 1、ADC介绍 1、1介绍 ADC即模数转换器。 例如&#xff1a;电信号转化成数字量。 1、2 ADC类型 并联比较型、逐次逼近型 并联比较型如下&#xff1a; 分压部分比较部分编码部分。 ADC分辨率&#xff1a;三位&#xff08;上图&#xff09; 优点&#xff1a;转换速度快…

类和对象下

文章目录 一、初始化列表1、语法&#xff1a;2、初始化顺序 二、static成员三、友元1、友元函数2、友元类 四、拷贝对象时的编译器优化例1、例2、例3、 一、初始化列表 1、语法&#xff1a; 初始化列表&#xff1a; 以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员…