您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)小程序中云開發(fā)的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1. 云開發(fā)簡介
由于小程序本身存儲數(shù)據(jù)的能力有限,所以不可能將大量的數(shù)據(jù)保存在客戶端,而且將數(shù)據(jù)保存在本地既不安全,也無法與其他小程序用戶共享,所以大多數(shù)小程序都需要一個服務(wù)端,服務(wù)端可以用多種技術(shù)實現(xiàn),如PHP、Node.js、Python、ASP.NET、Java EE等。不管使用哪種技術(shù)實現(xiàn)服務(wù)端,開發(fā)一款小程序都需要至少配備兩個程序員,一個是開發(fā)小程序的程序員,一個是開發(fā)服務(wù)端的程序員。而且這兩個程序員之間還需要不斷溝通,以便確認(rèn)共同遵循的接口。
開發(fā)一款小程序需要兩名或更多的程序員參與,一直困擾著很多小的創(chuàng)業(yè)公司,因為多雇傭一個人,就會增加很多成本。所以基于這個痛點,很多公司推出了云開發(fā)技術(shù),例如Bmob就是較早推出云開發(fā)的公司,所謂云開發(fā),就是將服務(wù)端的功能都封裝起來,然后向客戶端提供API訪問這些封裝的功能。服務(wù)端的主要功能無外乎數(shù)據(jù)存儲、文件上傳下載、視頻/音頻流等功能。這些功能大多開發(fā)都不困難,但比較費時,所以將其封裝起來供客戶端調(diào)用是一個非常好的主意。
騰訊最近推出了自己的云開發(fā)系統(tǒng),不過這個云開發(fā)系統(tǒng)目前只能用于小程序,而且只提供了如下3種。
云存儲
云函數(shù)
云數(shù)據(jù)庫是指在服務(wù)端提供的數(shù)據(jù)庫服務(wù),小程序云提供的數(shù)據(jù)庫屬于文檔數(shù)據(jù)庫,文檔數(shù)據(jù)庫有別于關(guān)系型數(shù)據(jù)庫。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中可以保存若干個表,每一個表由若干條記錄組成。但文檔數(shù)據(jù)庫保存的是JSON格式的數(shù)據(jù),每一個JSON文檔相當(dāng)于關(guān)系型數(shù)據(jù)庫中的一個表。也就是說,文檔數(shù)據(jù)庫保存的是JSON文檔的集合。非常流行的MongoDB就是典型的文檔數(shù)據(jù)庫。云數(shù)據(jù)庫個組成部分對應(yīng)的關(guān)系如下表所示。
關(guān)系數(shù)據(jù)庫 | 文檔數(shù)據(jù)庫 |
---|---|
數(shù)據(jù)庫(database) | 數(shù)據(jù)庫(database) |
表(table) | 集合(collection) |
行(row) | 記錄(record/doc) |
列(column) | 字段(field) |
云存儲為小程序提供了遠(yuǎn)程上傳和下載文件的能力。下載可以提供權(quán)限管理,小程序可以通過相應(yīng)的API實現(xiàn)文件的上傳和下載功能。
云函數(shù)就是一段可以運行在服務(wù)端的代碼,之所以要將部分代碼在服務(wù)端運行,主要有如下兩個原因:
部署多個用戶共享,且容易維護(hù)的代碼
獲取敏感信息,如appid、openid等。
2. 搭建云開發(fā)環(huán)境
現(xiàn)在讓我們來開發(fā)第一個與云的小程序,首先應(yīng)該下載最新版的微信開發(fā)者工具,然后在小程序后臺獲取AppID。使用云開發(fā)功能,必須使用真實的AppID,不能使用測試用的AppID。
啟動微信開發(fā)者工具,新創(chuàng)建一個小程序工程。在創(chuàng)建小程序工程的過程中,需要輸入AppID和項目名稱,然后在最下面的目標(biāo)列表中選擇“建立云開發(fā)快速啟動模板”選項,如下圖所示。
創(chuàng)建完支持云開發(fā)的小程序工程后,工程目錄結(jié)構(gòu)和IDE主界面如下圖所示。當(dāng)前工程默認(rèn)帶了一些例子(模板中的例子)來幫助理解和開發(fā)基于云的小程序。
如果第一次使用這個AppID開發(fā)基于云的小程序,應(yīng)該單擊界面上方的“云開發(fā)”按鈕,會顯示如下圖所示的頁面。
這是一個開通云服務(wù)的頁面,單擊“開通”按鈕,就會開通用于云開發(fā)的服務(wù)。在開通的過程中會出現(xiàn)如下圖所示的確認(rèn)對話框,單擊”確定“按鈕進(jìn)入下一個設(shè)置頁面。
這個頁面是”新建環(huán)境“頁面,如下圖所示。需要輸入”環(huán)境名稱“,一個任意的字符串。在下面列出了基礎(chǔ)版的配置。如數(shù)據(jù)庫存儲空空間、云函數(shù)數(shù)量等。如果想要更多的資源,那以后肯定是要收費的。天下沒有免費的午餐。不過這個配置做實驗和用戶量不是非常大的小程序還是夠用的。
單擊”確定“按鈕,就會創(chuàng)建一個環(huán)境,然后會進(jìn)入如下圖所示的云開發(fā)控制臺。在這個控制臺中可以管理用戶、云數(shù)據(jù)庫、云存儲、云函數(shù)以及統(tǒng)計分析。并且會顯示相關(guān)的信息,如今日API調(diào)用
如果想創(chuàng)建新環(huán)境,可以將鼠標(biāo)放在右側(cè)當(dāng)前環(huán)境minicloud上,會彈出如下圖所示的菜單,單擊”創(chuàng)建新環(huán)境“菜單項就會創(chuàng)建一個新的環(huán)境,目前每個小程序賬號課免費創(chuàng)建兩個新環(huán)境。
3. 部署login云函數(shù)
模板會默認(rèn)創(chuàng)建一個login云函數(shù),用于返回openid(標(biāo)識當(dāng)前微信登錄用戶的ID),所以在開發(fā)基于云的小程序之前,首先要先部署login云函數(shù)。
選中l(wèi)ogin云函數(shù),在右鍵菜單中單擊”上傳并部署“菜單項進(jìn)行部署,如下圖所示。
成功部署login云函數(shù)后,回到小程序的主頁面,單擊“點擊獲取openid”按鈕,如下圖所示,會通過login云函數(shù)獲取openid。
成功通過login云函數(shù)獲取openid后,會顯示如下圖的頁面。現(xiàn)在就可以使用云API來開發(fā)小程序了。
4. 開始實戰(zhàn)
現(xiàn)在我們來開發(fā)第一個基于云的小程序,這個小程序非常簡單,就是在一個集合中插入一條數(shù)據(jù),也就是一個JSON格式的文本。
一個集合就相當(dāng)于一個表。選擇環(huán)境后,小程序就會默認(rèn)有一個數(shù)據(jù)庫,所以就不需要單獨創(chuàng)建數(shù)據(jù)庫了,只需要在該數(shù)據(jù)庫中創(chuàng)建若干個集合(表)即可。
首先打開云開發(fā)控制臺,切換到”數(shù)據(jù)庫“頁面,單后單擊左上角的”添加集合“,會彈出如下圖所示的”添加集合“對話框,輸入集合的名字,然后單擊”確定“按鈕添加集合。
創(chuàng)建一個新集合后的效果如下圖所示。可以通過單擊右側(cè)的”添加記錄“導(dǎo)入json或csv文件,每個文件最大50MB。不過本節(jié)并不會通過云開發(fā)控制臺導(dǎo)入,而是使用代碼來插入文檔。
由于獲得openid后,會跳到userConsole頁面,所以我們在這個頁面的onLoad函數(shù)中向test集合插入一個json文檔。
在小程序開發(fā)工具中定位到userConsole.js文件,并找到onLoad函數(shù),如下圖所示。
在onLoad函數(shù)中會從全局變量(globalData)中獲取openid。操作集合首先要通過init函數(shù)初始化環(huán)境,init函數(shù)的語法格式如下:
wx.cloud.init({env:envname})
其中envname是字符串類型的值,表示要使用的環(huán)境名,在前面已經(jīng)創(chuàng)建了一個名為minicloud的環(huán)境了,所以本例的envname的值是'minicloud'。
然后使用下面的代碼獲取數(shù)據(jù)庫和集合對象。
const db = wx.cloud.database() const test = db.collection('test')
其中test是前面建立的集合名。
最后使用add方法插入json格式的數(shù)據(jù),完整的代碼如下:
wx.cloud.init({env:'minicloud'}) const db = wx.cloud.database() const test = db.collection('test') test.add({ // data 字段表示需新增的 JSON 數(shù)據(jù) data: { name: "Bill", age:30 }, success: function (res) { // 輸出成功插入后的id以及其他信息 console.log(res) } })
現(xiàn)在重新運行程序,獲取openid后,就會在小程序開發(fā)者工具的Console中看到如下圖的信息。
回到云開發(fā)控制臺,會看到test集合多了如下圖所示的數(shù)據(jù)。這表明json文檔已經(jīng)插入成功。
現(xiàn)在來改進(jìn)前面編寫的基于云的小程序。這個小程序盡管可以向云數(shù)據(jù)庫中插入數(shù)據(jù),不過代碼與模板代碼混在了一起,在真正的小程序項目中,不可能讓用戶先單擊按鈕獲得openid,再進(jìn)行下面的操作,所以現(xiàn)在重新編寫基于云的小程序。主要包括如下功能。
從文本輸入組件輸入姓名和年齡,單擊“插入數(shù)據(jù)”按鈕向云數(shù)據(jù)庫插入包含信命和年齡的數(shù)據(jù)。
從文本輸入組件輸入記錄ID,單擊“查詢數(shù)據(jù)”按鈕,從云數(shù)據(jù)庫中查詢相關(guān)的數(shù)據(jù),并將查詢到的數(shù)據(jù)中的姓名和年齡顯示在頁面上。
小程序主界面如下圖所示。
為了在我們自己頁面上實現(xiàn)這些功能,首先在小程序工程中創(chuàng)建一個main目錄,并創(chuàng)建如下圖所示的文件。
接下來修改app.json文件,將main頁面變成首頁(第一個顯示的頁面),也就是將 "pages/main/main"放在pages數(shù)組的第一個元素的位置,修改后的app.json文件的內(nèi)容如下:
{ "cloud": true, "pages": [ "pages/main/main", "pages/userConsole/userConsole", "pages/storageConsole/storageConsole", "pages/databaseGuide/databaseGuide", "pages/addFunction/addFunction", "pages/deployFunctions/deployFunctions", "pages/chooseLib/chooseLib" ], "window": { "backgroundColor": "#F6F6F6", "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#F6F6F6", "navigationBarTitleText": "云開發(fā) QuickStart", "navigationBarTextStyle": "black" } }
現(xiàn)在重新運行小程序,會看到main頁面已經(jīng)成為了小程序的首頁。由于本例的頁面需要用到一些組件,所以需要現(xiàn)在main.wxml文件中輸入下面的代碼完成
main頁面的布局。
<view> <input style='margin-top: 40rpx;' placeholder="請輸入姓名" value="{{name}}" bindinput="bindKeyInputName" /> <input style='margin-top: 40rpx;' placeholder="請輸入年齡" value="{{age}}" bindinput="bindKeyInputAge" /> <button style='margin-top: 40rpx;' bindtap='insertData'>插入數(shù)據(jù)</button> <input style='margin-top: 40rpx;' placeholder="請輸入記錄ID" value="{{recordId}}" bindinput="bindKeyInputId" /> <button style='margin-top: 40rpx;' bindtap='queryData'>查詢數(shù)據(jù)</button> <text style='margin-top: 40rpx;'> 姓名:{{nameResult}} </text> <text style='margin-top: 80rpx;'> 年齡:{{ageResult}} </text> </view>
在main.wxml文件中,包含3個<input>組件和2個text組件,這5個組件分別與age、name、recordId,nameResult和ageResult五個變量綁定,修改和獲取這5個組件的值也只需要考慮這5個變量即可。
在小程序中調(diào)用云API之前,必須要獲取小程序的openid,這個openid表示當(dāng)前小程序的用戶ID。由于進(jìn)入小程序必須要通過微信,所以小程序使用與微信相同的用戶驗證體系,因此,小程序就不需要單獨登錄了,而openid就是小程序是否登錄的憑證。
獲取openid的代碼已經(jīng)包含在模板中了,只需要找到index.js文件,并搜索onGetOpenid函數(shù),會看到如下的代碼。
onGetOpenid: function() { // 調(diào)用云函數(shù) wx.cloud.callFunction({ name: 'login', data: {}, success: res => { console.log('[云函數(shù)] [login] user openid: ', res.result.openid) app.globalData.openid = res.result.openid wx.navigateTo({ url: '../userConsole/userConsole', }) }, fail: err => { console.error('[云函數(shù)] [login] 調(diào)用失敗', err) wx.navigateTo({ url: '../deployFunctions/deployFunctions', }) } }) }
上面的代碼用于調(diào)用名為login的云函數(shù)獲取小程序的openid。通常只需要將onGetOpenid函數(shù)中的代碼直接復(fù)制到main.js文件中的onLoad函數(shù)即可。
向云數(shù)據(jù)庫插入數(shù)據(jù)的代碼前面已經(jīng)學(xué)過,一會大家可以看本例完整的代碼。從云數(shù)據(jù)庫中查詢數(shù)據(jù)可以使用下面的代碼。
db.collection(集合名).doc(記錄ID).get( { // 查詢到數(shù)據(jù)后觸發(fā),res參數(shù)值包含的查詢到 數(shù)據(jù) success:function(res) { }, // 未查詢到數(shù)據(jù)觸發(fā) fail:function(res) { } })
main.js中完整的實現(xiàn)代碼如下:
// miniprogram/pages/main/main.js const app = getApp() Page({ /** * 頁面的初始數(shù)據(jù) */ db:undefined, test:undefined, data: { name:'', age:'', recordId:'', nameResult:'', ageResult:'' }, /** * 生命周期函數(shù)--監(jiān)聽頁面加載 */ onLoad: function (options) { var that = this // 調(diào)用login云函數(shù)獲取openid wx.cloud.callFunction({ name: 'login', data: {}, success: res => { console.log('[云函數(shù)] [login] user openid: ', res.result.openid) app.globalData.openid = res.result.openid wx.cloud.init({ env: 'minicloud' }) that.db = wx.cloud.database() that.test = that.db.collection('test') }, fail: err => { console.error('[云函數(shù)] [login] 調(diào)用失敗', err) wx.navigateTo({ url: '../deployFunctions/deployFunctions', }) } }) }, // 單擊“插入數(shù)據(jù)”按鈕調(diào)用該函數(shù) insertData:function() { var that = this try { // 將年齡轉(zhuǎn)換為整數(shù)類型值 var age = parseInt(that.data.age) // 如果輸入的年齡不是數(shù)字,會顯示錯誤對話框,并退出該函數(shù) if(isNaN(age)) { // 顯示錯誤對話框 wx.showModal({ title: '錯誤', content: '請輸入正確的年齡', showCancel: false }) return } // 向test數(shù)據(jù)集添加記錄 this.test.add({ // data 字段表示需新增的 JSON 數(shù)據(jù) data: { name: that.data.name, age: age }, // 數(shù)據(jù)插入成功,調(diào)用該函數(shù) success: function (res) { console.log(res) wx.showModal({ title: '成功', content: '成功插入記錄', showCancel:false }) that.setData({ name:'', age:'' }) } }) } catch(e) { wx.showModal({ title: '錯誤', content: e.message, showCancel: false }) } }, // 單擊“查詢數(shù)據(jù)”按鈕執(zhí)行該函數(shù) queryData:function() { var that = this // 根據(jù)記錄ID搜索數(shù)據(jù)集 this.db.collection('test').doc(this.data.recordId).get({ // 找到記錄集調(diào)用 success: function (res) { // 將查詢結(jié)果顯示在頁面上 that.setData({ nameResult:res.data.name, ageResult:res.data.age }) }, // 未查到數(shù)據(jù)時調(diào)用 fail:function(res) { wx.showModal({ title: '錯誤', content: '沒有找到記錄', showCancel: false }) } }) }, // 下面的函數(shù)用于當(dāng)更新input組件中的值時同時更新對應(yīng)變量的值 bindKeyInputName: function (e) { this.setData({ name: e.detail.value }) }, bindKeyInputAge:function(e) { this.setData({ age: e.detail.value }) }, bindKeyInputId:function(e) { this.setData({ recordId:e.detail.value }) }, })
現(xiàn)在重新運行小程序,并添加一些數(shù)據(jù),看到云開發(fā)控制臺中的test集合下多了幾條記錄,如下圖所示。這表明已經(jīng)將數(shù)據(jù)成功插入test集合。
現(xiàn)在回到小程序開發(fā)界面,在"查詢按鈕“上方的文本輸入框中輸入一條記錄的ID,單擊”查詢數(shù)據(jù)“按鈕,會看到按鈕下方會顯示如下圖的查詢結(jié)果,如果未查詢到結(jié)果,會顯示一個提示對話框。
關(guān)于“小程序中云開發(fā)的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。