開發者可使用雲開發開發微信小程序、小遊戲,無需搭建服務器,便可使用雲端能力。html
雲開發爲開發者提供完整的雲端支持,弱化後端和運維概念,無需搭建服務器,使用平臺提供的 API 進行核心業務開發,便可實現快速上線和迭代,同時這一能力,同開發者已經使用的雲服務相互兼容,並不互斥。前端
目前提供三大基礎能力支持:node
雲函數:在雲端運行的代碼,微信私有協議自然鑑權,開發者只需編寫自身業務邏輯代碼數據庫
數據庫:一個既可在小程序前端操做,也能在雲函數中讀寫的 JSON 數據庫npm
存儲:在小程序前端直接上傳/下載雲端文件,在雲開發控制檯可視化管理小程序
小程序·雲開發提供了三個基礎能力:數據庫、存儲和雲函數,這一章節咱們介紹下這幾個能力分別是什麼,咱們能用他來作什麼。後端
雲開發提供了一個 JSON 數據庫,顧名思義,數據庫中的每條記錄都是一個 JSON 格式的對象。一個數據庫能夠有多個集合(至關於關係型數據中的表),集合可看作一個 JSON 數組,數組中的每一個對象就是一條記錄,記錄的格式是 JSON 對象。微信小程序
關係型數據庫和 JSON 數據庫的概念對應關係以下表:api
關係型 | 文檔型 |
---|---|
數據庫 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