近期,小程序開放了新的能力——「小程序·雲開發」,幫助開發者快速構建微信小程序的後端服務。我做爲一名微信小程序的開發者,也在第一時間嘗試了小程序雲開發,並將我本身在開發過程當中的經驗分享給你們。前端
簡單的來講,小程序雲開發是一款 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 管理界面)微信小程序
小程序雲開發能夠自動實現用戶登陸的校驗,開發者無需再次校驗用戶身份,直接經過雲函數的 event.userInfo.openId
便可獲取到用戶信息。直接調用數據庫 、文件存儲 API 時,也會自動關聯到用戶對應的 openId ,若是用戶受權小程序獲取暱稱等信息,這些信息也會自動出如今小程序雲開發的管理控制檯中的用戶登陸部分。不須要開發者手動上傳。promise
目前小程序雲開發提供了免費 1GB 的數據庫存儲和 免費 5 GB 的文件存儲,這個存儲量並非很大,可是對於一些我的開發者來講,仍是綽綽有餘的,開發者可使用這些容量來快速開發本身的小程序。微信
小程序雲開發的調用很是的簡單,你只須要了解 JavaScript 和一些簡單的異步的知識 (promise),就能夠完成小程序雲開發的內容。less
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) } })