微信小程序云开发之云函数Note
1.云函数
- 云函数即在云端(服务器端)运行的函数。
- 一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。
1.1 云函数必备的基本环境部署
-
开通微信小程序云开发
-
新建一个目录,命名随意。这里为cloud
-
在project.config.json中:
"cloudfunctionRoot": "/cloud"
这里需要注意,/cloud中的cloud是2.步骤中新建的目录,名称要严格一致
这行代码的作用比较明显,就是把我们2.中新建的目录,带上小云彩,连通云端。 -
云开发环境初始化。在app.js的onLaunch中:
//云开发环境初始化
wx.cloud.init({
env:"cloud-ypgou-id"
})
至此,要写云函数的基本部署,已经实现。
2.第一个云函数Add(a+b)
大致流程:
- 在小程序index.wxml调用Add功能(一个按钮开关),
- index.js中转前者的调用,并实现云端函数的响应
- 云端函数响应完毕之后,返回结果,到控制台。
具体步骤:
-
在带有云彩标识的cloud目录(以下统称:云标cloud)中,新建Node.js云函数,命名随意。这里为add
-
在app.json的“page”内部第一行位置,注入一行代码,用于新建一个专用的首页(此步骤看个人习惯,非必须):
"pages/index-cloud/index-cloud",
-
实现云函数主体内容。在Add的index.js中,把入口函数内部的默认内容清除掉,写入:
// 云函数入口函数 exports.main = async (event, context) => { a = event.a; b = event.b; return a + b; }
-
将云函数Add,上传并部署到云端:不安装依赖。
-
在index-cloud.wxml中,写入:
<input placeholder="输入a值:" bindinput="number_a"></input> <input placeholder="输入b值:" bindinput="number_b"></input> <button bindtap="useAddfunction" type="primary">调用云函数add</button>
-
在index-cloud.js中,写入:
let getNumber_a="" let getNumber_b="" Page({ number_a(a){ getNumber_a= Number(a.detail.value); }, number_b(b){ getNumber_b = Number(b.detail.value); }, Add(){ wx.cloud.callFunction({ name:"Add", data:{ a : getNumber_a, b : getNumber_b }, success(res){ console.log("计算完成",res) }, fail(err){ console.log("计算失败",err) } }) } })
-
直接运行,就可以了。
3.第二个云函数 getopenid
会写第一个a+b,就表明已经熟悉了云函数的书写方式与细化的流程了,那么,获取openid也就轻而易举了。
1.新建云函数 ,命名为 getOpenIdCloudFunction
2.在index.wxml中,写入:
<button bindtap="getOpenId" type="primary">点击此处获取openID</button>
代码的效果如下,是一个按钮:点击此处获取openID
3.在 getOpenIdCloudFunction的index.js中,写入:
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return wxContext.OPENID;
}
4.上传并部署以下云函数,就可以执行了。
4.第三个云函数,获取云端名为“list”的数据库全部数据。
-
在云标Cloud下,新建Node.js文件,命名为getInformation
-
在index-clod.wxml中,写入:
<button bindtap="getCloudinformation" type="primary">点击此处获取数据</button>
-
在index-cloud.js中,写入:
getCloudinformation(){ wx.cloud.callFunction({ name: "getInformation", success(res){ console.log("获取数据成功",res); }, fail(err){ console.log("获取数据失败",err); } }) }
-
完善云函数主体内容。在getInformation的index.js中,写入:
//云函数入口 exports.main = async (event, context) => { return cloud.database().collection("list").get(); }
至此,此函数功能已经实现。
4.1 数据库api调取云端数据 VS 云函数调取云端数据
对比数据库api访问云端数据来说,云函数访问云数据库,不受权限设置的影响。而数据库api访问云数据库的话,一旦云端权限禁止用户访问,则访问失败。