微信小程序開發入門之共享賬本(六)
接著上一篇
上次說了登錄,是時候把各種數據往數據庫裡寫,記住這些用戶信息了
打開IDE(集成開發環境縮寫),打開雲開發界面,選擇數據庫,點擊新建集合collection(對應於關係型數據庫中的表table)
輸入集合名稱,點擊確定完成
NOSQL數據庫不用預先定義有哪些字段field(對應關係型數據庫的列colum),但是我們還是要計劃好這個集合有哪些字段,下面是一個簡單的設計
其中_id是自動生成的,是記錄的唯一id,其餘是自行設定的字段
定義好集合的字段後,可以先在雲開發環境中測試一下,雲開發環境提供了一個很好的測試工具,在數據庫頁面下面的[高級操作]裡
點開[未命名模板],將裡面的內容刪除,輸入下面代碼進行測試
db.collection('user').add({ data:{ name:'花錢', avatarUrl:'', activeAcctBookId:'', joinTime:new Date(), acctBooks:[] } })
代碼很容易理解,db代表數據庫,等同於cloud.database(),是雲開發測試環境為了測試方便默認提供的,我們在代碼裡寫的時候還是要自己手動獲取一下
db..collection('')是定位需要操作的集合,這裡輸入剛剛新建的user集合。
後面接著就是對這個集合的各種操作,add/delete/update/get分別對應增刪改查操作,更詳細的介紹可以看官方文檔,現在不看也行,後面需要了當資料去查就行
add操作需要傳入一個對象,對象必須包括要增加的數據,選填成功/失敗/完成情況下的回調函數,這裡我們只填數據data就行
點擊下面的[執行]按鈕,會彈出一個提示
這表示你的數據操作腳本沒有錯誤,點擊確定後會在右邊顯示執行結果
返回的是新增記錄默認生成的_id
回到user集合,可以看到已經新增了一條數據,內容就是腳本里的內容,_id就是執行結果顯示的字符串
剛剛寫的腳本可以選擇存起來,以便以後複用,點擊[執行]旁邊的[保存]按鈕即可將腳本保存,單擊腳本名稱可以重命名腳本,最好用一個容易分辨的名字
雲開發環境的操作就到這裡了,再回到IDE主界面
這裡說一下雲開發方式,雲開發不是不需要後臺環境,而是騰訊給你提供了一個現成的環境,以前需要自己配的運行環境和數據庫現在都準備的好好的,剩下的只需要你提供自定義的操作函數就行,這個操作函數就叫做[雲函數]
雲函數的默認文件夾是cloudfunction,在之前一直用的miniprogram上面
在上面右鍵,選擇新建雲函數
你把之前的更改提交了嗎?一定要養成提交的習慣,等代碼多起來了會感覺到幫助很大
提交完了就還是右鍵,新建雲函數
輸入雲函數名稱,這裡是登錄用,可以用login
新建的雲函數默認會上傳到雲開發環境,我這邊顯示上傳失敗了,提示有同名函數,不知道是什麼時候加的,先刪了再說
打開雲開發,選擇[雲函數],可以看到確實有一個叫login的函數
點擊[刪除]可以刪除已有的雲函數
再回到IDE中,在login文件夾上右鍵,選擇上傳並部署:雲端安裝…即可完成雲函數在雲端的部署
然後再打開雲開發,選擇[雲函數],可以看到又有一個叫login的函數
打開login函數的index.js文件,內容更改如下
const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() // 雲函數入口函數 exports.main = async (event, context) => { let user = event.user user.openId = event.userInfo.openId let p = await db.collection('user').add({ data: user }) if(p._id && p._id != ''){ return Promise.resolve() } else { return Promise.reject('插入數據失敗') } }
event參數是小程序調用時傳入的參數,它本身自帶一個字段userInfo,其中包含用戶的openId和小程序的appId,這裡我們會用到openId;user是我們在程序中上傳的用戶信息
取出新用戶信息和openId後,調用數據庫的add操作進行添加數據,數據庫操作本身是異步的,加上await關鍵字後可以用同步的方式來處理其返回結果。
如果添加數據成功則返回結果p中包含新數據的_id字段的值,所以可以據此判斷是否新增數據成功,給前臺相應的響應。
新增用戶的操作應該放在用戶第一次授權的地方進行處理,所以我們修改welcome的go函數來處理新增用戶信息的操作,代碼更改如下
go:function(e){ if(e.detail.userInfo){ let info = e.detail.userInfo let p = wx.cloud.callFunction({ name:'login', data:{ user:{ name: info.nickName, avatarUrl:info.avatarUrl, joinTime:new Date(), activeAcctBookId:'', acctBooks:[] } } }) p.then(res => { wx.navigateTo({ url: '../index/index' }) }).catch(err => { console.error(err) wx.showToast({ title: '新建用戶失敗', icon:'fail' }) }) } }
其中通過wx.cloud.callFunction的方式來調用雲函數,參數name標明雲函數的名稱,data表示要上送的數據,這裡我們送的是新用戶的信息,因為雲函數會返回一個Promise對象,所以這裡要用then和catch來分別處理成功(Promise.resolve)和失敗(Promise.reject)的情況,如果在雲函數中返回的是一個值,則只需要在then中對值進行判斷來處理
運行之前先要清除一下已經授權的信息,在IDE上方一排菜單中,最後有一個清緩存的下拉框
點擊選擇[清除授權數據]即可清除
運行程序,點擊登錄,界面上還是一樣沒什麼變化
我們打開雲開發界面,切到數據庫,看看user集合裡是不是新增了一條新的數據
好了,今日份開發到此完成
關鍵字: Promise.resolve 程序開發 數據庫