上篇文章中提到有關微信小程序雲開發中雲函數的運用,而今天我們就來通過這篇文章較爲深入地瞭解它。
開始介紹之前,請先確保已開通小程序的雲開發功能,以便能跟着本文一起定義和調用雲函數。具體開通方式詳見 → 微信官方文檔·小程序。
一、什麼是雲函數?
雲函數 即在雲端(服務器端)運行的函數,它就相當於通常我們所熟知的後端提供的可供前端調用的接口,只不過這裏的“接口”是部署在小程序提供的雲服務器上,而且它也有自己獨特的調用方式,具體調用方法後面會講到。
更多雲函數相關內容詳見 → 微信官方文檔·小程序。
二、如何定義雲函數?
1. 新增配置字段
在開始定義雲函數之前,首先你得告訴小程序你將在哪個目錄下定義你的雲函數:
// 在 project.config.json 文件中添加以下字段
{
"cloudfunctionRoot": "cloudbase/"
}
這裏的cloudbase/
就代表你的雲函數所在目錄,接下來我們所有的雲函數都要在這個目錄下定義。
2. 新建雲函數目錄
在新建雲函數目錄之前,需要先保證上面配置中的cloudbase
目錄存在(若沒有須新建),然後再在cloudbase
目錄下新建雲函數目錄,目錄名稱即爲雲函數名稱。
假設我接下來打算定義一個兩數相加的雲函數,上圖中add
目錄即爲新創建的雲函數目錄,雲函數名稱就叫add
。
3. 定義雲函數
在雲函數目錄下新建index.js
文件,然後就可以在該文件中定義你的雲函數了。
exports.main = async (event, context) => {
return event.a + event.b;
}
雲函數有兩個形參:event
和context
,其中event
對象中含有所有調用雲函數時所傳參數,此外還自帶一個userInfo
屬性,而userInfo
屬性下保存有小程序的appId
和用戶的openId
,context
對象包含了此處調用的調用信息和運行狀態,可以用它來了解服務運行的情況。
例如,我們可以直接通過如下雲函數獲取用戶的openId:
exports.main = async (event, context) => {
return event.userInfo.openId;
}
有時候雲函數中可能需要調用其他依賴,這時我們就需要安裝依賴,比如最常用的wx-server-sdk
:
const cloud = require('wx-server-sdk');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
4. 部署雲函數
右鍵點擊雲函數目錄,選擇 創建並部署 即可。
三、如何調用雲函數?
1. 小程序端內調用
小程序內調用調用雲函數有兩種方式:手動調用 和 自動調用,這裏以調用上例定義的雲函數add
爲例,簡單介紹下 手動調用 方式。
wx.cloud.callFunction({
// 雲函數名稱
name: 'add',
// 傳給雲函數的參數
data: {
a: 1,
b: 1
},
success: function(res) {
console.log(res.result.sum); // 2
},
fail: console.error
})
有關 自動調用 方式可以前往 微信小程序開發之訂閱消息 查看,這裏不再贅述。
2. 小程序端外調用
小程序內定義的雲函數,不僅小程序端內可調用,端外也能調用,只不過不能直接調用,需要通過服務端調用小程序提供的 HTTP API 觸發雲函數來實現間接調用。
具體端外調用雲函數方式詳見 → 微信官方文檔·小程序。
四、uni-app 如何開發雲函數?
此處不介紹uni-app
自身的 雲開發uniCloud中的雲函數,而是介紹如何在uni-app
中創建微信小程序雲函數目錄。
其實方法非常簡單,只需把雲函數根目錄建在static
目錄下即可。
然後再在manifest.json
的源碼視圖中的mp-weixin
字段下添加cloudfunctionRoot
字段:
結束語
有了雲開發之後,開發小程序的前端工程師們就能輕鬆地同時解決前後端開發問題,而云函數又是雲開發中非常重要的一部分,故有此文。