近期,小程序開放了新的能力——「小程序·雲開發」,幫助開發者快速構建微信小程序的后端服務。我作為一名微信小程序的開發者,也在第一時間嘗試了小程序雲開發,並將我自己在開發過程中的經驗分享給大家。
小程序雲開發是什么
簡單的來說,小程序雲開發是一款 Serverless 服務,他為開發者提供了「雲函數」、「雲數據庫」和「雲文件存儲」,並且將這些能力封裝成特定的接口,以 wx.cloud.xxx
來進行調用。
小程序雲開發不是什么
首先,小程序雲開發不是 PaaS ,它和我們所熟悉的 BAE、Google App Engine 不同,所提供的雲函數並不是完整的環境,而是以一個特定的事件為單位的。嚴格來說,它所提供的雲函數功能其實是 FaaS (Function as a Service),同類型的產品有 LeanCloud 的雲函數、 Bmob 的雲函數、AWS 的 Lambda、 Azure 的 Functions 和 Google Cloud Functions。
其次,小程序雲開發不是 LeanCloud 、 Bmob 之類的 BaaS 。不同於上述的兩款產品,他們提供了豐富的 API 接口,能夠實現各種各樣的功能,小程序·雲開發將接口進行深度的封裝,僅能在小程序、雲函數中通過 wx.cloud 和 wx-server-sdk 來調用(截止2018年8月24日)。因此,小程序雲開發 僅能應用在小程序中,無法在其他產品中應用(比如 App )
小程序雲開發適合什么樣的場景?
所有的業務邏輯都僅僅需要在小程序端完成,無需過於復雜的管理邏輯(這是因為雲函數、雲數據庫無法在小程序以外的區域調用,因此無法實現強大的 Web 管理界面)
小程序雲開發的優勢
1. 微信登錄邏輯簡單
小程序雲開發可以自動實現用戶登錄的校驗,開發者無需再次校驗用戶身份,直接通過雲函數的 event.userInfo.openId
即可獲取到用戶信息。直接調用數據庫 、文件存儲 API 時,也會自動關聯到用戶對應的 openId ,如果用戶授權小程序獲取昵稱等信息,這些信息也會自動出現在小程序雲開發的管理控制台中的用戶登錄部分。不需要開發者手動上傳。
2. 免費
目前小程序雲開發提供了免費 1GB 的數據庫存儲和 免費 5 GB 的文件存儲,這個存儲量並不是很大,但是對於一些個人開發者來說,還是綽綽有余的,開發者可以使用這些容量來快速開發自己的小程序。
3. 簡單
小程序雲開發的調用非常的簡單,你只需要了解 JavaScript 和一些簡單的異步的知識 (promise),就可以完成小程序雲開發的內容。
小程序開發過程中遇到的一些坑
1. 小程序雲開發新建一直表(集合)的時候 需要在表里配置讀寫權限,否則請求數據的時候可以查到這種表,但是沒有數據。
2. 小程序雲開發請求數據有條數限制,一次最多返回20條,請求如果放到雲函數里,最多可以返回100條
const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() // 雲函數入口函數 //分頁查詢雲函數 exports.main = async(event, context) => { var dbName = event.dbName; //集合名稱 var filter = event.filter ? event.filter : null; var pageIndex = event.pageIndex ? event.pageIndex : 1; var pageSize = event.pageSize ? event.pageSize : 10; const countResult = await db.collection(dbName).where(filter).count() //獲取集合總記錄 const total = countResult.total; //得到總記錄數 const totalPage = Math.ceil(total / pageSize) //計算需要多少頁 var hasMore; //提示前端是否還有數據 if (pageIndex > totalPage || pageIndex == totalPage) { //沒有數據了 返回false hasMore = false } else { hasMore = true } //最后查詢數據返給前端 return db.collection(dbName).where(filter).skip((pageIndex - 1) * pageSize).limit(pageSize).get().then(res => { res.hasMore = hasMore; return res }) }
let that = this wx.cloud.callFunction({ name: 'todoList',//雲函數名稱 data: { dbName: 'todoList',//所請求的庫 pageIndex: that.data.pageIndex, //當前頁數 pageSize: that.data.pageSize//一頁返回的條數 }, success: function (res) { console.log(res.result, '[todoList][活動列表]') that.setData({ things: that.data.things.concat(res.result.data), hasMore: res.result.hasMore }) }, fail: res => { console.log(res) } })
3. 小程序雲開發修改更新數據的時候只能通過_id查找到要修改的數據,不知道是不是我數據庫配置不對。。。。。