云函数
官方参考文档:developers.weixin.qq.com/miniprogram…
云函数基本用法
开始之前,可以将模板自动创建的云函数删除了,重新创建,便于学习。
如果遇到cloudfunctions|当前环境:undefined这种情况,说明你并没有开通云开发,所以找不到。如果开通了还是出现,请尝试重新启动项目 - 左上角(项目 - 重新打开此项目)
这里举两种方式
1.单个文件方式
随意取的名字,不要在意😁
选择项目文件夹 - cloudfunctions
右键单击,选择
新建Node.js云函数命名
getUser等待创建完毕创建完毕会生成带有三个文件的文件夹
config.json
index.js
package.json
不用管两个json文件,只需要看index.js即可
创建
index.js
// getUser/index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
// 上面两行代码是默认的,什么都不用改
// 云函数入口函数
exports.main = async (event, context) => {
// cloud.getWXContext()获取小程序用户信息
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
调用
到这里模板已经介绍完毕,下面就是做一些云函数调用了
// demo.js
page({
// 调用
getUserInfo(){
wx.cloud.callFunction({
name:"getUser",// name必须跟你创建的云函数名保持一致
data:{},//如果没有参数可以不用写
success(res){
console.log("请求成功",res)
},
error(err){
console.log("请求失败",err)
}
})
}
})
使用云函数连接数据库
const db = cloud.database();
const _ = db.command;
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database();// 连接数据库
const _ = db.command;//初始化command方法 - 用于数据库操作
// 云函数入口函数
exports.main = async (event, context) => {
try {
let getData = await db.collection("demolist").get();
return getData
} catch (error) {
return {error: error.message}
}
}
同样的调用方法,数据库操作命令也是一样的
2.多文件聚合 - 官方模板
目录结构
原先的:
cloudfunctions
getUser
config.json
index.js
package.json
getData
config.json
index.js
package.json
现在的:
cloudfunctions
user
login
index.js
rename
index.js
。。。
config.json
index.js
package.json
类似于这种的,写法并没有什么很大的差别
创建
cloudfunctions
user
getUserInfo
index.js
config.json
index.js
package.json
//user/index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const getUserInfo = require("./getUserInfo/index");//引入要调用的文件
// 云函数入口函数
exports.main = async (event, context) => {
switch(event.type){
case "getUser"://名字就是匹配条件
return await getUserInfo.main(event,context)
}
}
//user/getUserInfo/index.js
// 云函数入口文件
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,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
上传并部署就完毕了
调用
page({
getOpenid(){
wx.cloud.callFunction({
name:"user",
data:{
type:"getUser"//要匹配的项
},
success(res){
console.log("请求成功",res);
},
error(err){
console.log("请求失败",err);
}
})
},
})
后面基本采用同样的方式,不管是数据库请求,还是多个云函数