4.4 云函数
4.4.2 创建第一个微信小程序
在上一篇文已经创建了
4.4.3 获取小程序用户信息
云函数的优势在于和微信登录鉴权的无缝连接。
小程序端调用云函数时,云函数的传入参数会被注入小程序端用户的openid,开发者可以在云函数内使用wx-server-sdk提供的getWXContext方法获取每次调用的上下文(appid,openid),无须校验openid的正确性,因为微信已经完成了这部分的鉴权。如下代码所示:
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID, // 获取小程序的openid
appid: wxContext.APPID, // 获取小程序的APPID
}
}
假设云函数命名为test,上传并部署后,在小程序测试调用,代码如下:
wx.cloud.callFunction({
name: 'test', // 云函数名称
complete: res => {
console.log(res)
}
})
4.4.4 在云函数中使用服务端API
在云函数中,可以使用服务端API访问云开发数据库和文件存储功能。与小程序端相似。
在云函数中获取数据库testOne中集合的所有记录,代码如下:
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database() // 获取数据库引用
exports.main = async (event, context) => {
return db.collection('testOne').get()
}
预览效果如下:
在服务端数据库API只支持Promise风格,因此collection上的get方法会返回一个Promise对象。在云函数中,如果返回一个Promise对象,云函数会在异步操作完成后再返回结果给调用方。因此云函数会在数据库异步取完数据后返回结果。
在云函数可以调用其他云函数,如新建一个函数调用add云函数,代码如下:
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event, context) => {
return await cloud.callFunction({
name: 'add',
data: {
a: 1,
b: 2
}
})
}
由于cloud.callFunction调用云函数也是异步执行的代码,希望拿到函数的返回值需要在调用函数前加上await关键字。
await关键字和async关键字一起使用,只有async关键字的函数可以使用await。
网友评论