云函数即在云端(服务器端)运行的函数,只编写函数代码并部署到云端即可在微信小程序端调用,同时云函数之间也可互相调用
一个云函数的写法与一个在本地定义的JavaScript方法无异,代码运行在云端Node.js中
当云函数被微信小程序端调用时,定义的代码会被放在Node.js运行环境中执行
在项目根目录的project.config.json
文件中,可以看到有一个cloudfunctionRoot
字段,指定云函数根目录。代码如下所示。
{
"cloudfunctionRoot":"cloudfunctions/"
}
同时,云函数根目录的图标显示“云目录图标”
云函数根目录下的第一级目录与云函数的名字相同
如果对应的线上环境存在该云函数,则我们会用一个特殊的“云图标”标明,如图5.10所示。
下面新建一个云函数
右击云函数根目录
选择“新建Nodejs云函数”
将该云函数命名为addition
开发者工具在本地创建出云函数目录和入口index.js文件,同时在线上环境中创建出对应的云函数
创建成功后,工具会提示是否立即本地安装依赖,确定后工具会自动安装wx-server-sdk
可以看到类似下面的一个云函数模板:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
Appid: wxContext.Appid,
unionid: wxContext.UNIONID,
}
}
云函数的传入参数有两个:
- 一个是event对象
- 一个是context对象
event指的是触发云函数的事件
当微信小程序端调用云函数时,event就是微信小程序端调用云函数时传入的参数
外加后端自动注入的微信小程序用户的openid和微信小程序的Appid
context对象包含此处调用的调用信息和运行状态,可以用它了解服务运行的情况
在模板中也默认请求了wx-server-sdk
这是一个帮助我们在云函数中
- 操作数据库
- 存储
- 调用其他云函数
微信提供的库
下面修改云函数,完成加法功能,代码如示例5-4所示。
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
let sum = event.a + event.b;
return {
sum
}
}
把从微信小程序端传过来的参数a、b相加得到sum
然后把sum返回给微信小程序端
在微信小程序调用这个原函数前,需要先将云函数部署到云端
在云函数目录上右击
从快捷菜单中选择“上传并部署:(云端安装依赖)”选项
之后就会将云函数整体打包上传,并部署到线上环境中。
部署完成后,就可以在微信小程序中调用该云函数了,代码如示例5-5所示。
index.wxml
<button bindtap='cloudFunc'> 调用云函数 </button>
index.js
Page({
cloudFunc: function(){
wx.cloud.callFunction({
// 云函数名称
name: 'addition',
// 传给云函数的参数
data: {
a: 1,
b: 2,
},
success(res) {
console.log(res)
},
fail: console.error
})
}
})
在页面上添加了一个按钮
单击该按钮执行cloudFunc
在cloudFunc里通过wx.cloud.callFunction
调用云函数,结果如图5.11所示。
可以看到,返回结果sum等于3