微信小程序云函数的使用

遇到的问题

小程序端仅创建者对数据有写权限,一些操作无法在前端代码直接调用数据库 API,例如创建问卷时会指定问卷的份数,当其他用户填写问卷后,问卷份数应该减一,此时由于填写问卷的用户对问卷数据没有写权限,造成更新数据失败。

云数据库的权限结构:

如何解决

注意到“云控制台和服务端始终有所有数据读写权限”,可以编写实现问卷份数减一的业务逻辑的云函数,上传并部署该云函数;当用户填写问卷完成后,在小程序端调用该云函数,便可以成功更新数据。

  • 1、创建并编写 reduceremain 云函数

    index.js 代码如下:

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    cloud.init()
    
    const db = cloud.database()
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      try {
        return await db.collection('tasks').doc(event.taskId).update({
          // data 传入需要局部更新的数据
          data: {
            remain: event.remain
          }
        })
          .then(console.log)
          .catch(console.error)
      } catch (e) {
        console.error(e)
      }
    }
    
  • 2、上传并部署该云函数

  • 3、调用云函数

云函数介绍

  • 云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。
  • 小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。

比如我们如下定义一个云函数,命名为 add ,功能是将传入的两个参数 a 和 b 相加:

// index.js 是入口文件,云函数被调用时会执行该文件导出的 main 方法
// event 包含了调用端(小程序端)调用该函数时传过来的参数,同时还包含了可以通过 getWXContext 方法获取的用户登录态 `openId` 和小程序 `appId` 信息
const cloud = require('wx-server-sdk')
exports.main = (event, context) => {
  let { userInfo, a, b} = event
  let { OPENID, APPID } = cloud.getWXContext() // 这里获取到的 openId 和 appId 是可信的
  let sum = a + b

  return {
    OPENID,
    APPID,
    sum
  }
}

在开发者工具中上传部署云函数后,我们在小程序中可以这么调用:

wx.cloud.callFunction({
  // 需调用的云函数名
  name: 'add',
  // 传给云函数的参数
  data: {
    a: 12,
    b: 19,
  },
  // 成功回调
  complete: console.log
})
// 当然 promise 方式也是支持的
wx.cloud.callFunction({
  name: 'add',
  data: {
    a: 12,
    b: 19
  }
}).then(console.log)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值