雲開發介紹
開發者可以使用雲開發開發微信小程序、小游戲,無需搭建服務器,即可使用雲端能力。
雲開發為開發者提供完整的雲端支持,弱化后端和運維概念,無需搭建服務器,使用平台提供的 API 進行核心業務開發,即可實現快速上線和迭代,同時這一能力,同開發者已經使用的雲服務相互兼容,並不互斥。
目前提供三大基礎能力支持:
-
雲函數:在雲端運行的代碼,微信私有協議天然鑒權,開發者只需編寫自身業務邏輯代碼
-
數據庫:一個既可在小程序前端操作,也能在雲函數中讀寫的 JSON 數據庫
-
存儲:在小程序前端直接上傳/下載雲端文件,在雲開發控制台可視化管理
-
雲開發能力介紹
小程序·雲開發提供了三個基礎能力:數據庫、存儲和雲函數,這一章節我們介紹下這幾個能力分別是什么,我們能用他來做什么。
數據庫
雲開發提供了一個 JSON 數據庫,顧名思義,數據庫中的每條記錄都是一個 JSON 格式的對象。一個數據庫可以有多個集合(相當於關系型數據中的表),集合可看做一個 JSON 數組,數組中的每個對象就是一條記錄,記錄的格式是 JSON 對象。
關系型數據庫和 JSON 數據庫的概念對應關系如下表:
關系型 | 文檔型 |
---|---|
數據庫 database | 數據庫 database |
表 table | 集合 collection |
行 row | 記錄 record / doc |
列 column | 字段 field |
以下是一個示例的集合數據,假設我們有一個 books
集合存放了圖書記錄,其中有兩本書:
[
{
"_id": "Wzh76lk5_O_dt0vO", "title": "The Catcher in the Rye", "author": "J. D. Salinger", "characters": [ "Holden Caulfield", "Stradlater", "Mr. Antolini" ], "publishInfo": { "year": 1951, "country": "United States" } }, { "_id": "Wzia0lk5_O_dt0vR", "_openid": "ohl4L0Rnhq7vmmbT_DaNQa4ePaz0", "title": "The Lady of the Camellias", "author": "Alexandre Dumas fils", "characters": [ "Marguerite Gautier", "Armand Duval", "Prudence", "Count de Varville" ], "publishInfo": { "year": 1848, "country": "France" } } ]
存儲
雲開發提供了一塊存儲空間,提供了上傳文件到雲端、帶權限管理的雲端下載能力,開發者可以在小程序端和雲函數端通過 API 使用雲存儲功能。
在小程序端可以分別調用 wx.cloud.uploadFile
和 wx.cloud.downloadFile
完成上傳和下載雲文件操作。下面簡單的幾行代碼,即可實現在小程序內讓用戶選擇一張圖片,然后上傳到雲端管理的功能:
// 讓用戶選擇一張圖片 wx.chooseImage({ success: chooseResult => { // 將圖片上傳至雲存儲空間 wx.cloud.uploadFile({ // 指定上傳到的雲路徑 cloudPath: 'my-photo.png', // 指定要上傳的文件的小程序臨時文件路徑 filePath: chooseResult.tempFilePaths[0], // 成功回調 success: res => { console.log('上傳成功', res) }, }) }, })
上傳完成后可在控制台中看到剛上傳的圖片。
雲函數
雲函數是一段運行在雲端的代碼,無需管理服務器,在開發工具內編寫、一鍵上傳部署即可運行后端代碼。
小程序內提供了專門用於雲函數調用的 API。開發者可以在雲函數內獲取到每次調用的上下文(appid
、openid
等),無需維護復雜的鑒權機制,即可獲取天然可信任的用戶登錄態(openid
)。
比如我們如下定義一個雲函數,命名為 add ,功能是將傳入的兩個參數 a 和 b 相加:
// index.js 是入口文件,雲函數被調用時會執行該文件導出的 main 方法 // event 包含了調用端(小程序端)調用該函數時傳過來的參數,同時還包含了用戶登錄態 `openId` 和小程序 `appId` 信息 exports.main = (event, context) => { let { userInfo, a, b} = event let { openId, appId} = userInfo // 這里獲取到的 openId 和 appId 是可信的 let sum = a + b return { openId, appId, sum } }
在開發者工具中上傳部署雲函數后,我們在小程序中可以這么調用:
wx.cloud.callFunction({
// 需調用的雲函數名 name: 'add', // 傳給雲函數的參數 data: { a: 12 b: 19, }, // 成功回調 complete: console.log }) // 當然 promise 方式也是支持的 wx.cloud.callFunction({ name: 'add', data: { a: 12, b: 19 } }).then(console.log)
如需在雲函數中操作數據庫、管理雲文件、調用其他雲函數等操作,可使用官方提供的 npm 包 wx-server-sdk
進行操作
為什么需要wx-server-sdk這個包呢,什么需要用呢?
其實這個庫是為在雲函數里可以操作數據、文件、調用其他雲函數,而雲函數是運行在雲端,可以理解為是node端,所以不能和客戶端使用一套api,所以微信提供了這么一套服務端的api,正好和客戶端api相對應了;
官方文檔請看:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html