如何优雅的调用云函数?
发布于 4 年前 作者 yangxiuying 1005 次浏览 来自 分享

前言

这是在做《#小程序云开发挑战赛#-情侣券-想做就做》这个项目过程中学习到了一个新知识。

能够优雅的调用云函数,极大程度的减少维护成本。

在此之前我都是业务代码层面直接调用云函数,而且一个云函数就一个方法。
如下:
首页

wx.cloud.callFunction({
      name: 'login'
    }).then(res => {
      wx.setStorageSync('openid', res.result.openid)
    })

login 云函数

const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

exports.main = (event, context) => {

  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
    env: wxContext.ENV,
  }
}

这种代码写起来很爽,但是要维护起来的时候就很头疼,云函数越写越多,找起来就比较麻烦,无法快速定位。

如何解决呢?

从两个维度来解决:

  1. 从小程序代码来说,可以加一个api层来管理所有云函数的调用。
  2. 从云函数代码来说,可以在一个云函数里面做个简单路由写多个方法。

1.云函数调用统一管理

从之前的顺序:小程序业务层=>云函数 改成 小程序业务层=>API层=>云函数
业务层:调用API

// 先导入api的user类
import {
  login
} from 'api/user.js'

 login().then(res => {
      wx.setStorageSync('openid', res.result.openid)
    })

API层:调用云函数

async function login() {

  return wx.cloud.callFunction({
    // 云函数名称
    name: 'user',
    // 传给云函数的参数
    data: {
      action: 'login'
    }
  });

}

module.exports = {
  login:login
}

上面案例中我们只用了login方法,其实在实战中user里面会有所有的相关操作,引入也可以引入多个方法。

所有的云函数都会在api层进行管理,这样改云函数就不需要去业务代码里面去找了。

业务层只负责传参与回调,调用过程不需要关心,同时还可以支持多个页面复用api方法。

2. 一个云函数多个方法

从上面api层的案例不难看出,data里面传入了一个action参数,这个参数就是你要调用的方法名称。

云函数:

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

cloud.init();

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
 // 简单路由
  if (event.action && userHelper[event.action]) {
    const result = await userHelper[event.action](wxContext, event)
    return result
  }

  return {
    message: 'This action was not found',
    error: -1,
  }
}

const db = cloud.database();

const userHelper = {

  async getOpenId(context, params) {
    return {
      openid: context.OPENID,
    }
  }
}

通过userHelper来管理所有的方法,你如果需要添加方法可以直接在userHelper下面添加即可,action传入方法名称就可以调用了。

这样便于查找与管理,同一类业务之需要创建一个云函数即可。
还有一点就是减少云函数数量,云开发不同的收费套餐是有云函数数量限制的。
套餐配合可见:配额说明

总结

全部写完了,如果觉得不错就给我的《#小程序云开发挑战赛#-情侣券-想做就做》点个赞,谢谢。

2 回复

谢谢楼主,受教了。

这个不错,跟社区很多思路一样。但是写法有参考的地方。点赞

回到顶部