小程序·云開發(fā)初體驗
云開發(fā)基本情況
云開發(fā)(Tencent Cloud Base, TCB)是騰訊云為移動開發(fā)者提供的一站式后端云服務(wù)椭盏,它幫助開發(fā)者統(tǒng)一構(gòu)建和管理資源掏颊,免去了移動引用開發(fā)過程中繁瑣的服務(wù)器搭建以及運維艾帐、域名注冊及備案、數(shù)據(jù)接口實現(xiàn)等繁瑣的流程柒爸,讓開發(fā)者可以專注于業(yè)務(wù)邏輯的實現(xiàn)捎稚,而無需理解后端邏輯及服務(wù)器運維知識,開發(fā)門檻更低今野,效率更高。
云開發(fā)能力
- 云數(shù)據(jù)庫:提供高性能的數(shù)據(jù)庫寫入和查詢服務(wù)催什。通過TCB的SDK宰睡,可以直接在客戶端對數(shù)據(jù)經(jīng)行讀寫,也可以在云函數(shù)中讀寫數(shù)據(jù)旋圆,還可以通過控制臺麸恍,數(shù)據(jù)進(jìn)行可視化的增刪改查等操作。目前云開發(fā)的數(shù)據(jù)庫為Mongodb
- 存儲:提供高擴展性,低成本艾君、可靠和安全的文件存儲服務(wù)肄方。可以滿足不同場景下的文件訪問管理虹茶。開發(fā)者可以在客戶端和云函數(shù)端通過API直接使用存儲
- 云函數(shù):(運行環(huán)境node.js)云函數(shù)是在云端運行的函數(shù)隅要,無需購買、搭建服務(wù)器步清,只需編寫函數(shù)代碼并部署到云端廓啊,即可在騰訊云基礎(chǔ)設(shè)施上彈性、安全的運行代碼谴轮。
編程基礎(chǔ)
- HTML、CSS疮装,務(wù)必掌握flex布局
- Js推薦更多的使用ES5粘都,ES6,深入了解js事件觸發(fā)機制
- Node.js運行在服務(wù)端的javascript受啥,云函數(shù)現(xiàn)有唯一支持的語言
- MongoDB:介于關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫之間的產(chǎn)品鸽心,是非關(guān)系型數(shù)據(jù)庫當(dāng)中功能最豐富居暖,最像關(guān)系數(shù)據(jù)庫的。云開發(fā)現(xiàn)有唯一支持的數(shù)據(jù)庫糯景。
- vue.js現(xiàn)有前端開發(fā)必備能力
云開發(fā)流程
小程序開發(fā)-普通開發(fā):購買服務(wù)器域名,部署服務(wù)器環(huán)境蟀淮,配置SSL證書,配置服務(wù)器信息涨缚,請求調(diào)試
小程序云開發(fā):調(diào)用API
兩種開發(fā)可兼容
云開發(fā)開通與項目初始化
新建小程序項目策治,必須填寫APPID(不可使用測試號,如果使用測試號你是選不了云開發(fā)的茂翔,騰訊說的履腋,不解釋),后端服務(wù)使用小程序云開發(fā)俐末。
點擊微信開發(fā)者工具云開發(fā)工具欄開通云開發(fā)(AppID 首次開通云環(huán)境后奄侠,需等待大約 10 分鐘方可正常使用云 API,在此期間官方后臺服務(wù)正在做準(zhǔn)備服務(wù)垄潮,如嘗試在小程序中調(diào)用云 API 則會報
cloud init error:{ errMsg: "invalid scope" }
的錯誤 弯洗,這個時候不要慌,等10分鐘左右就好了)project.config.json添加字段cloudfunctionRoot用于指定存放云函數(shù)的目錄
使用云能力前牡整,需先調(diào)用wx.cloud.init方法完成云能力初始化(env:指定云開發(fā)環(huán)境)
獲取openid(數(shù)據(jù)庫操作大多需要用戶openid逃贝,需要先配置好login云函數(shù)),如遇到未安裝wx-server-sdk模塊沐扳,請先安裝node.js再參考如下鏈接
數(shù)據(jù)庫開發(fā)基礎(chǔ)
上手?jǐn)?shù)據(jù)庫
創(chuàng)建第一個集合:打開控制臺沪摄,選擇“數(shù)據(jù)庫 ”標(biāo)簽頁纱烘,通過“添加集合”入口創(chuàng)建一個集合祈餐。假設(shè)我們要創(chuàng)建一個數(shù)據(jù)查詢小程序,我們創(chuàng)建一個名為counters的集合啤它。創(chuàng)建成功后舱痘,可以看到counters集合管理界面,界面中我們可以添加記錄芭逝、查找記錄、管理索引和管理權(quán)限台妆。
按照快速啟動模板提示進(jìn)行添加記錄胖翰。如需在數(shù)據(jù)表中導(dǎo)入數(shù)據(jù),則json或csv格式的數(shù)據(jù)編碼必須是UTF-8
-
數(shù)據(jù)類型介紹
Null 相當(dāng)于一個占位符 String 字符串 Number 數(shù)字 Object 對象 Array 數(shù)組 Bool 布爾值 GeoPoint 地理位置點 Date 時間 數(shù)據(jù)權(quán)限控制
-
數(shù)據(jù)庫初始化:開始使用數(shù)據(jù)庫API進(jìn)行增刪改查操作之前懊缺,需要先獲取數(shù)據(jù)庫的引用培他。如下調(diào)用獲取默認(rèn)環(huán)境數(shù)據(jù)庫的引用:
const db = wx.cloud.database() const testDB = wx.cloud.database({ env:''//測試環(huán)境 })
-
可以通過在集合對象上調(diào)用add方法往集合中插入一條記錄:
db.collection('test').add({ data:{ test:'插入數(shù)值' }, success:res =>{ //在返回結(jié)果中會包含新創(chuàng)建的記錄的_id this.setData({ csid:res._id, test:'插入數(shù)值' }) } })
-
數(shù)據(jù)庫查詢
db.collection('test').doc('數(shù)值').get({ success:function(res){ //res.data包含該紀(jì)錄的數(shù)據(jù) console.log(res.data) } })
其余不做解釋
存儲管理基礎(chǔ)
云函數(shù)架構(gòu)基礎(chǔ)
-
最基礎(chǔ)的云函數(shù):將兩個數(shù)字相加的函數(shù)作為第一個云函數(shù)示例
wx.cloud.callFunction({ name:'add',//要調(diào)用的云函數(shù)的名稱 data:{//傳遞給云函數(shù)的參數(shù) x:1, y:2, }, success:res =>{ //成功后的回調(diào) }, fail:err =>{}, complete:() =>{ //執(zhí)行完成后 } })
云函數(shù)
exports.main =(event,context) =>{ return{ sum:event.a+event.b } }
上傳并部署成果之后即可
使用npm:在云函數(shù)中我們可以引入第三方依賴來幫助我們更快的開發(fā)舀凛。云函數(shù)的運行環(huán)境是Node.js。因此我們可以使用npm安裝第三方依賴馋记。
-
異步返回結(jié)果:經(jīng)常懊烤,我們需要在云函數(shù)中處理一些異步操作,在異步操作完成后再返回結(jié)果給到調(diào)用方冤馏。此時我們可以通過在云函數(shù)中返回一個Promise的方法來完成寄啼。
//index.js export.main = async(event,context) =>{ return new Promise((resove,reject){ //在3秒后返回結(jié)果給調(diào)用方(小程序/其他云函數(shù)) setTimeout(() =>{//定時器 resove(event.a+event.b) },3000) }) }
云函數(shù)運行機制
- 運行環(huán)境:云函數(shù)運行在云端Linux環(huán)境中,一個云函數(shù)在處理并發(fā)請求的時候會創(chuàng)建多個云函數(shù)實例涕刚,每個云函數(shù)實例之間相互隔離乙帮,沒有公用的內(nèi)存或硬盤空間。云函數(shù)實例的創(chuàng)建驾茴、管理氢卡、銷毀等操作由平臺自動完成。每個云函數(shù)實例都在/tmp目錄下提供了一塊512MB的臨時磁盤空間用于處理單次云函數(shù)執(zhí)行過程中的臨時文件讀寫需求译秦,需要特別注意的是,這塊臨時空間在函數(shù)執(zhí)行完畢后可能被銷毀筑悴,不應(yīng)依賴和假設(shè)在磁盤空間存儲的臨時文件會一直存在。如果需要持久化的存儲砚婆,請使用云存儲功能突勇。
- 無狀態(tài)函數(shù):云函數(shù)應(yīng)是無狀態(tài)的,冪等的验夯,即一次云函數(shù)的執(zhí)行不依賴上一次云函數(shù)執(zhí)行過程中在運行環(huán)境中殘留的信息摔刁。為了保證負(fù)載均衡,云函數(shù)平臺會根據(jù)當(dāng)前負(fù)載情況控制云函數(shù)實例的數(shù)量共屈,并且會在一些情況下重用云函數(shù)實例拗引,這使得連續(xù)兩次云函數(shù)調(diào)用如果由同一個云函數(shù)實例運行,那么兩者會共享同一個臨時空間矾削,但因為云函數(shù)實例隨時可以被銷毀豁护,并且連續(xù)的請求不一定會落在同一個實例楚里,因此云函數(shù)不應(yīng)依賴之前云函數(shù)調(diào)用中在臨時磁盤空間遺留的數(shù)據(jù)猎贴。總的原則即是云函數(shù)代碼應(yīng)是無狀態(tài)的达址。
- 事件模型:云函數(shù)的調(diào)用采用事件觸發(fā)模型趁耗,小程序端的每一次調(diào)用即觸發(fā)了一次云函數(shù)調(diào)用事件,云函數(shù)平臺會新建或復(fù)用已有的云函數(shù)實例來處理這次調(diào)用对粪。同理,因為云函數(shù)間也可以相互調(diào)用著拭,因此云函數(shù)間相互調(diào)用也是觸發(fā)了一次調(diào)用事件纱扭。