云开发省钱出大招之:一个云函数四行代码搞定所有云调用
在云开发初期,免费套餐比较充裕,我们都是一个云调用写成一个云函数,比如有检测图片安全的云函数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)
})
},
将几十个云调用相关的云函数合并成一个,节省了云函数的定额。
而且,极简。。。