微信小程序的云函数是一段运行在云端(服务器端)的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源,各云函数完全独立;可分别部署在不同的地区。
小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。
一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。当云函数被小程序端调用时,定义的代码会被放在 Node.js 运行环境中执行。
1、第一步
在项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,指定本地已存在的目录作为云函数的本地根目录。
代码语言:javascript复制 "cloudfunctionTemplateRoot": "cloudfunctionTemplate",
"cloudfunctionRoot": "./functions/",
设置完成之后,查看资源管理器,指定的目录已经变成云函数的目录。yydc是我项目云函数环境的名字。
2、选中云函数目录,右键菜单点击“新建Node.js云函数”,输入想创建的云函数的名字,自动创建云函数目录。系统会同时创建config.json,index.js,package.json这三个文件。
其中index.js是云函数实体文件。
我在测试过程中发现,有 wx-server-sdk 创建失败的情况,修改package.json 中依赖设置为:latest即可解决。
"dependencies": {
"wx-server-sdk": "latest"
}
3、编辑云函数文件,写个简单HelloWorld
代码语言:javascript复制// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
say: "hello world!"
}
/* return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
} */
}
4、上传云函数
选中我们写好的云函数目录,右键点击菜单“上传并部署:云端安装依赖(不上传node_modules)”,上传我们写好的云函数到云端。
注意:刚开始我忘了上传,导致云函数访问不正常,一直执行默认生成的代码。
5、测试云函数
打开云开发控制台,选中左上方“云函数”按钮,可以查看我们定义的所有云函数。
点击右侧“云端测试”链接
在右侧窗口输入云函数的输入参数(以json串的形式),点击下方“运行测试”按钮,运行云函数进行测试。
运行测试完成后下方会出现云函数执行情况
可以取日志列表,查看调用日志信息。
6、小程序中使用云函数
在小程序中编写调用代码
代码语言:javascript复制callCloldFunction:function(){
wx.cloud.callFunction({
// 云函数名称
name: 'loadAdd',
// 传给云函数的参数
data: {
word: 'this'
},
success: function(res) {
console.log(res.result) // 3
},
fail: console.error
})
},
调用并返回:
最后说下费用问题,云函数本身提供一些免费调用次数,超过是要收费的。而且在云函数中访问外部资源是没有免费额度的。最重要的一点“后付费”,使用的千万注意,千万不要因为访问量过大造成巨额损失。
其实,个人总体感觉这个云函数有点鸡肋,不如自己弄个服务器写后台,折腾云函数各种限制,又收费,实在没有使用必要。