云函數(shù)
云函數(shù)基本介紹
云函數(shù)即在云端(服務(wù)器端)運(yùn)行的函數(shù):
在物理設(shè)計(jì)上,一個(gè)云函數(shù)可由多個(gè)文件組成,占用一定量的CPU 內(nèi)存等計(jì)算資源;
各云函數(shù)完全獨(dú)立,可分別部署在不同的地區(qū);
開(kāi)發(fā)者無(wú)需購(gòu)買(mǎi)、搭建服務(wù)器,只需編寫(xiě)函數(shù)代碼并部署到云端即可在小程序端調(diào)用;
同時(shí)云函數(shù)之間也可互相調(diào)用;
云函數(shù)的編寫(xiě)方式:
一個(gè)云函數(shù)的寫(xiě)法與一個(gè)在本地定義的 JavaScript 方法無(wú)異,代碼運(yùn)行在云端 Node.js 中;
當(dāng)云函數(shù)被小程序端調(diào)用時(shí),定義的代碼會(huì)被放在Node.js 運(yùn)行環(huán)境中執(zhí)行;
我們可以如在 Node.js 環(huán)境中使用 JavaScript 一樣在云函數(shù)中進(jìn)行網(wǎng)絡(luò)請(qǐng)求等操作,而且我們還可以通過(guò)云函數(shù)后端 SDK 搭配使用多種服務(wù),比如使用云函數(shù) SDK 中提供的數(shù)據(jù)庫(kù)和存儲(chǔ) API 進(jìn)行數(shù)據(jù)庫(kù)和存儲(chǔ)的操作
云開(kāi)發(fā)的云函數(shù)的獨(dú)特優(yōu)勢(shì)在于與微信登錄鑒權(quán)的無(wú)縫整合。
當(dāng)小程序端調(diào)用云函數(shù)時(shí),云函數(shù)的傳入?yún)?shù)中會(huì)被注入小程序端用戶的 openid,開(kāi)發(fā)者無(wú)需校驗(yàn) openid 的正確性因?yàn)槲?信已經(jīng)完成了這部分鑒權(quán),開(kāi)發(fā)者可以直接使用該 openid。
云函數(shù)基本使用
可以右鍵云函數(shù)的文件夾, 選擇云環(huán)境
云函數(shù)的使用過(guò)程:
右鍵點(diǎn)擊云函數(shù)文件夾, 創(chuàng)建一個(gè)云函數(shù)
創(chuàng)建完成后, 可以在
moudle.js
文件的入口函數(shù)中編寫(xiě)云函數(shù)的代碼邏輯
const cloud = require('wx-server-sdk')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
// 自己編寫(xiě)的云函數(shù)
return "Hello Cloud Function"
}
編寫(xiě)完成后將云函數(shù)上傳到云端
上傳完成后, 可以在小程序中端調(diào)用API
wx.cloud.callFunction
對(duì)云函數(shù)進(jìn)行調(diào)用
<button type="primary" bindtap="onTestTap">測(cè)試云函數(shù)</button>
Page({
async onTestTap() {
const res = await wx.cloud.callFunction({
name: "test"
})
console.log(res);
}
})
云函數(shù)傳遞參數(shù)
例如: 讓云函數(shù)幫我們計(jì)算兩個(gè)數(shù)字的和
首先創(chuàng)建一個(gè)云函數(shù)
sum
, 并在云函數(shù)中編寫(xiě)邏輯代碼, 編寫(xiě)完成后上傳云函數(shù)
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
// 獲取調(diào)用者傳入的參數(shù), event中獲取傳入的參數(shù)
const { num1, num2 } = event
return num1 + num2
}
上傳完成后, 在小程序端調(diào)用云函數(shù), 并且傳入?yún)?shù)
async onSumTap() {
const num1 = 20
const num2 = 40
const res = await wx.cloud.callFunction({
name: "sum",
// data中傳遞參數(shù)
data: {num1, num2}
})
console.log(res);
}
云函數(shù)獲取openID
openid可以用于作為用戶身份的標(biāo)識(shí)符,所以在云開(kāi)發(fā)中我們可以獲取用戶openid來(lái)驗(yàn)證用戶是否已經(jīng)登錄。
openid獲取方式, 在云函數(shù)中獲取微信調(diào)用上下文
cloud.getWXContext():Object
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
openid: wxContext.OPENID,
unionid: wxContext.UNIONID,
}
}
在小程序端調(diào)用云函數(shù)即可獲得openid
<button type="primary" bindtap="onGetOpenId">獲取openid</button>
async onGetOpenId() {
const res = await wx.cloud.callFunction({
name: "getopenid"
})
console.log(res);
}
云函數(shù)操作數(shù)據(jù)庫(kù)
云函數(shù)中對(duì)數(shù)據(jù)庫(kù)的操作限制更少,所以我們常常會(huì)在云函數(shù)中進(jìn)行數(shù)據(jù)庫(kù)操作:
比如可以根據(jù)條件一次性刪除多條數(shù)據(jù);
比如對(duì)數(shù)據(jù)請(qǐng)求的個(gè)數(shù)沒(méi)有嚴(yán)格的限制, 小程序端一次可以請(qǐng)求20條數(shù)據(jù), 而云函數(shù)一次可以請(qǐng)求100條數(shù)據(jù);
在云函數(shù)操作數(shù)據(jù)庫(kù)的方式和小程序端是類似的, 只不過(guò)是編寫(xiě)到了云函數(shù)中
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
// 獲取數(shù)據(jù)庫(kù)和集合
const db = cloud.database()
const studentsCol = db.collection("students")
// 從集合中獲取數(shù)據(jù)
const res = await studentsCol.get()
// 將數(shù)據(jù)返回出去
return res
}
編寫(xiě)完云函數(shù)上傳后, 我們就可以在小程序端調(diào)用云函數(shù)獲取結(jié)果
<button type="primary" bindtap="onGetStuengts">獲取數(shù)據(jù)</button>
async onGetStuengts() {
const res = await wx.cloud.callFunction({
name: "getStudents"
})
console.log(res);
}
云函數(shù)發(fā)送http請(qǐng)求
云函數(shù)中支持對(duì)其他服務(wù)器進(jìn)行http請(qǐng)求,也支持使用axios庫(kù)發(fā)生網(wǎng)絡(luò)請(qǐng)求:
所以對(duì)于小程序某些域名的限制無(wú)法配置時(shí),我們可以通過(guò)云函數(shù)作為代理來(lái)請(qǐng)求數(shù)據(jù),再返回給小程序端;
進(jìn)入編寫(xiě)云函數(shù)的文件夾下, 安裝axios庫(kù)npm i axios
發(fā)送網(wǎng)絡(luò)請(qǐng)求, 安裝完成后就可以在云函數(shù)中通過(guò)axios發(fā)送網(wǎng)絡(luò)請(qǐng)求文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-405403.html
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
// 引入axios
const axios = require('axios')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
// 從自己的服務(wù)器請(qǐng)求數(shù)據(jù)
const res = await axios.get("http://123.207.32.32:8000/home/multidata")
// 將數(shù)據(jù)返回給客戶端
return res.data
}
在小程序端我們就可以調(diào)用云函數(shù)獲取到axios返回的數(shù)據(jù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405403.html
async onGetHome() {
const res = await wx.cloud.callFunction({
name: "getHomeData"
})
console.log(res);
}
到了這里,關(guān)于【云開(kāi)發(fā)】小程序端中使用云函數(shù)的介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!