一、雲函數
在小程序雲開發中,編譯器的cloudfunctions
代表雲函數部分。
1、創建雲函數
右鍵——新建Node.js雲函數
2、發送數據
雲函數上傳遞數據是需要藉助第三方庫進行傳遞。本次使用request庫
的內容進行傳遞數據。
(1)、安裝request(前置已安裝node.js)
查詢node和npm是否安裝
node -v
npm -v
打開github,搜索request/request-promise
在裏邊有安裝request的指令
右擊新建的雲函數,選擇在終端打開進行安裝
在安裝node的前提下,終端打開顯示不是內部命令,那麼重新打開編譯環境,右擊管理員身份打開就可以了。
之後在我們的雲數據庫入口文件中,
寫入依賴var rp=require('request-promise');
(2)、雲端上傳
在函數書寫完成後,右擊函數進行雲端上傳,一共包括了兩個上傳。兩個是有區別的,一般本地附加第三方庫或其他文件會生成一個mode_modules文件,但是雲端也是可以附屬依賴安裝的,並不需要上傳文件,所以一般選擇雲端安裝依賴不上傳。
全部上傳成功後,打開雲端控制檯,點擊雲函數,就能找到對應的上傳的雲函數文件了
可以通過雲端測試來進行驗證是否獲取到信息,如果提示
並且沒有數據返回,請重新檢查代碼,保存,重新上傳。直到日誌可以正常返回數據。
(3)、函數上傳數據編寫
因爲使用的是request庫,所以在github的文檔中有定義使用方法。
先定義一個URL地址,獲取信息(使用的謝成的API數據,此處註明出處)
var URL='http://musicapi.xiecheng.live/personalized'
之後寫雲函數入口函數,去除多餘部分,保留主幹
第一個參數爲要往哪裏傳送數據,成功後進入.then函數中,返回一個res
在雲端測試時,查看數據,我們需要的是一個result中的數據
所以返回時使用JSON.parse(res)
來返回result
exports.main = async (event, context) => {
//本身爲一個異步操作,在操作完成後可以返回一個值
var playlist=await rp(URL).then((res)=>{
//將我們想要的字符串通過JSON.parse轉換成對應的對象
return JSON.parse(res).result;
})
//打印到雲端雲函數日誌中,不在本地控制檯顯示
console.log(playlist);
從而在日誌中看到了對應的result信息。
這個時候,我們應該將對應的數據信息,上傳到雲數據庫中。
(4)、雲數據庫的操作
在上傳對應的數據,那麼我們需要在數據庫中有對應的集合。
所以在控制檯的雲數據庫中創建對應的集合
雲數據庫插入數據只能單條插入,所以插入數據信息肯定需要循環遍歷輸入
插入之前在對應的雲函數入口文件中,對數據庫進行初始化。
var db=cloud.database();
重點:初始化一定要放在cloud.init()
下邊,否則會報錯,提示沒有辦法使用init()。
然後我們開始遍歷循環給數據庫輸入數據(入口函數中)
註釋寫在圖片裏邊了,主要是異步過程的處理和沒有接觸過的雲數據庫函數調用。在寫完之後記得上傳函數。雲端測試運行
3、數據去重
在我們有新數據插入數據庫時,又不能因爲有相同成分而多次添加,所以這個時候就體現出來了數據去重的重要性。
在我們每次讀取URL的值得時候,我們這個時候都應該判斷一下,數據庫中是否存在了重複的值。
所以這個時候獲取數據庫集合中的值
var list=await db.collection('playlistDB').get();
然後將它與新讀取到的數據進行比較,然後將值給了新的第三方數組,修改上傳語句,將上傳的內容改成新的數組信息,大體思路就這個樣子
4、突破數據條數限制
從數據庫端只能獲取到100條數據,如果是小程序端更是隻有20條數據。
這樣的話針對大量數據的讀取肯定是不可以的,所以就逃突破這個限制。
思路:既然數據超過了100條,那麼就分開取,每一百條數據取一次,然後將每次取得在合起來,就獲取到了所有的數據。
首先取到集合中中的數據條數,但是返回值爲對象,所以將它轉化得到數據的總條數。然後用總的條數處於最大傳輸條數後向上取整可以得到我們需要分多少次的次數。之後開始分次數取值。最後所有數據獲得到後,開始迭代數據並將最後的數據賦值爲list
5、定時觸發雲函數,實現定時觸發器
在雲函數下邊新建一個config.json
名字是一定要叫這個的。如果默認有,請忽略新建過程。
在.json
中書寫定時觸發器
官方文檔在“雲開發——開發指引——雲函數——定時觸發器”
在設置好之後 上傳觸發器 即可。
源碼在githubhttps://github.com/fujinwei/learnminiapp/tree/master/yun-music