云函数即在云端(服务器端)运行的函数,只编写函数代码并部署到云端即可在微信小程序端调用,同时云函数之间也可互相调用

一个云函数的写法与一个在本地定义的JavaScript方法无异,代码运行在云端Node.js中

当云函数被微信小程序端调用时,定义的代码会被放在Node.js运行环境中执行

在项目根目录的project.config.json文件中,可以看到有一个cloudfunctionRoot字段,指定云函数根目录。代码如下所示。

  1. {
  2. "cloudfunctionRoot":"cloudfunctions/"
  3. }

同时,云函数根目录的图标显示“云目录图标”
云函数根目录下的第一级目录与云函数的名字相同

如果对应的线上环境存在该云函数,则我们会用一个特殊的“云图标”标明,如图5.10所示。
image.png

下面新建一个云函数

右击云函数根目录
选择“新建Nodejs云函数”
将该云函数命名为addition

开发者工具在本地创建出云函数目录和入口index.js文件,同时在线上环境中创建出对应的云函数

创建成功后,工具会提示是否立即本地安装依赖,确定后工具会自动安装wx-server-sdk

可以看到类似下面的一个云函数模板:

  1. // 云函数入口文件
  2. const cloud = require('wx-server-sdk')
  3. cloud.init()
  4. // 云函数入口函数
  5. exports.main = async (event, context) => {
  6. const wxContext = cloud.getWXContext()
  7. return {
  8. event,
  9. openid: wxContext.OPENID,
  10. Appid: wxContext.Appid,
  11. unionid: wxContext.UNIONID,
  12. }
  13. }

云函数的传入参数有两个:

  • 一个是event对象
  • 一个是context对象

event指的是触发云函数的事件
当微信小程序端调用云函数时,event就是微信小程序端调用云函数时传入的参数
外加后端自动注入的微信小程序用户的openid和微信小程序的Appid

context对象包含此处调用的调用信息和运行状态,可以用它了解服务运行的情况
在模板中也默认请求了wx-server-sdk
这是一个帮助我们在云函数中

  • 操作数据库
  • 存储
  • 调用其他云函数

微信提供的库

下面修改云函数,完成加法功能,代码如示例5-4所示。

  1. const cloud = require('wx-server-sdk')
  2. cloud.init()
  3. exports.main = async (event, context) => {
  4. let sum = event.a + event.b;
  5. return {
  6. sum
  7. }
  8. }

把从微信小程序端传过来的参数a、b相加得到sum
然后把sum返回给微信小程序端

在微信小程序调用这个原函数前,需要先将云函数部署到云端

在云函数目录上右击
从快捷菜单中选择“上传并部署:(云端安装依赖)”选项
之后就会将云函数整体打包上传,并部署到线上环境中。

部署完成后,就可以在微信小程序中调用该云函数了,代码如示例5-5所示。

  1. index.wxml
  2. <button bindtap='cloudFunc'> 调用云函数 </button>
  1. index.js
  2. Page({
  3. cloudFunc: function(){
  4. wx.cloud.callFunction({
  5. // 云函数名称
  6. name: 'addition',
  7. // 传给云函数的参数
  8. data: {
  9. a: 1,
  10. b: 2,
  11. },
  12. success(res) {
  13. console.log(res)
  14. },
  15. fail: console.error
  16. })
  17. }
  18. })

在页面上添加了一个按钮
单击该按钮执行cloudFunc
在cloudFunc里通过wx.cloud.callFunction调用云函数,结果如图5.11所示。
image.png
可以看到,返回结果sum等于3