云开发省钱出大招之:一个云函数四行代码搞定所有云调用
发布于 4 年前 作者 yina 2815 次浏览 来自 分享

在云开发初期,免费套餐比较充裕,我们都是一个云调用写成一个云函数,比如有检测图片安全的云函数msgSecCheck,有获得小程序码的getQRCode,有发送订阅消息的sendMsg,等等。。。

现在,云开发免费套餐的定额越来越少了,10个云函数名额哪够了,逼急了,把所有云调用整成一个云函数,居然还只需要三行代码。

所有云调用接口如下:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/

云函数名:openapi

index.js代码:

const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async event => {
  return await cloud.openapi[event.action](event.body)
}

当然某些特殊用法,比如图片安检,需要额外添加代码,则代码可改成:

const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event, context) => {
  if (event.action == 'security.imgSecCheck') return await imgSecCheck(event)//处理图片安全检查
  return await cloud.openapi[event.action](event.body || {})
}
async function imgSecCheck(event) {
  let res = await cloud.downloadFile({
    fileID: event.fileID,
  })
  return await cloud.openapi.security.imgSecCheck({
    media: {
      contentType: "image/png",
      value: res.fileContent
    }
  })
}

config.json代码:权限可扩展。

{
  "permissions": {
    "openapi": [
      "urlscheme.generate",
      "uniformMessage.send",
      "wxacode.getUnlimited",
      "security.msgSecCheck",
      "security.imgSecCheck",
      "cloudbase.sendSms",
      "cloudbase.getOpenData",
      "subscribeMessage.send",
      "auth.getPaidUnionId"
    ]
  }
}

小程序端调用代码:

  onOpenapi: function () {
    wx.cloud.callFunction({
      name: 'openapi',
      data: {
        action: 'urlscheme.generate',
        body: {}
      }
    }).then(res => {
      console.log(res)
    })
  },

将几十个云调用相关的云函数合并成一个,节省了云函数的定额。

而且,极简。。。

1 回复

逻辑全放前端,安全性为零。

回到顶部