雲開發介紹
小程序·雲開發是微信團隊聯合騰訊雲推出的專業的小程序開發服務。它弱化了后端以及運維的概念,開發者無需搭建服務器,使用微信平台提供的api即可完成核心的業務開發。
1、雲開發的優勢:
-無需搭建服務器,多端統一開發,只需使用平台提供的各項能力,即可快速開發業務。
-雲開發中,開發者只需要關注前端的頁面展示, 后端的服務器、維護、安全處理等工作全部由騰訊雲代替我們完成
-雲開發不需要為小程序配置request合法域名等,可實現項目快速上線和迭代。
-免鑒權調用微信開放服務。無需管理證書、簽名、秘鑰,直接調用微信 API,輕松獲取用戶憑證 。復用微信私有協議及鏈路,保證業務安全性。
-雲開發核心能力包括:雲存儲、雲數據庫、雲函數。
2、雲開發與傳統服務器開發的區別
- | 雲開發 | 傳統服務器 |
---|---|---|
開發語言 | node.js | java,python,php |
開發周期 | 1-5周 | 1-5個月 |
開發效率 | 雲相關API開箱即用,前端一站式解決 | 前后端聯調、資源存儲、部署等操作繁雜,上線流程耗時長 |
部署難易 | 基本不用部署 | 部署費時費力 |
是否需要域名 | 不需要 | 需要 |
是否需要備案 | 不需要 | 需要 |
是否需要支持https | 不需要 | 需要 |
日常運維 | 可視化監控分析數據庫讀寫、雲存儲資源占用情況、雲函數調用情況、用戶訪問情況 | 需時刻關注環境運行狀況,管理相關資源,運維難度大 |
適合項目 | 中小項目 | 大項目 |
學習成本 | 容易上手 | 學習時間久 |
開通雲開發
1、在創建小程序時選擇[雲開發]選項
2、創建雲開發環境
3、獲取雲環境ID
4、配置雲環境
配置好雲環境后,點擊開發者工具中的雲開發按鈕,就可以進入雲開發控制台。
5、初始化雲環境
//app.js
App({
onLaunch: function () {
if (!wx.cloud) {
console.error('請使用 2.2.3 或以上的基礎庫以使用雲能力')
} else {
wx.cloud.init({
env: wx.cloud.DYNAMIC_CURRENT_ENV ,
})
}
this.globalData = {}
}
})
env 參數說明:
env 參數決定接下來小程序發起的雲開發調用(wx.cloud.xxx)會默認請求到哪個雲環境的資源
此處請填入環境 ID, 環境 ID 可打開雲控制台查看
如不填則使用默認環境(第一個創建的環境)
或者使用wx.cloud.DYNAMIC_CURRENT_ENV用來標志當前所在環境
數據存儲能力--雲數據庫
雲開發提供了一個 JSON 數據庫,顧名思義,數據庫中的每條記錄都是一個 JSON 格式的對象。一個數據庫可以有多個集合(相當於關系型數據中的表),集合可看做一個 JSON 數組,數組中的每個對象就是一條記錄,記錄的格式是 JSON 對象。免費的存儲空間為 2G。
1、關系型數據可與JSON數據庫概念關系對比
關系型數據庫 | 文檔型數據庫 |
---|---|
數據庫database | 數據庫database |
表table | 集合 collection |
行 row | 記錄 record / doc |
列 column | 字段 field |
2、數據類型
數據類型: String、Number、Object、Array、Bool、null、 Date:時間、 Geo:地理位置
3、管理端數據庫操作
-創建集合、增刪改查及導入導出、執行腳本查詢、權限管理等。
-管理端高級操作中,可以使用給定模板修改執行腳本,進行執行腳本查詢:
-數據庫的權限設置:
除了使用控制台中默認的幾種權限之外,我們可以通過配置安全規則,在小程序端、網頁端精細化的控制雲存儲和集合中所有記錄的增、刪、改、查權限,自動拒絕不符合安全規則的前端數據庫與雲存儲請求,保障數據和文件安全。使用安全規則之后,我們可以在控制台對每個集合以及雲存儲的文件夾分別配置安全規則,也就是自定義權限,配置的格式是 json,仍然嚴格遵循 json 配置文件的寫法(比如數組最后一項不能有逗號,,配置文件里不能有注釋等)。
auth.openid 是當前的登錄用戶,doc._openid 是該記錄的創建者。
雲開發安全規則詳細設置 >>> 數據庫安全規則
雲開發數據庫設計指導 >>> 數據庫設計指導
4、在微信小程序中調用數據庫
// 如需獲取其他環境的數據庫引用,可以在調用時傳入一個對象參數,在其中通過 env 字段指定要使用的環境
const db = wx.cloud.database({
env: 'xxxx'
})
5、數據庫增刪改查
新增
db.collection('表名')
.add({
data:{
//數據對象
}
})
.then(res=>{})
.catch(err=>{})
刪除
db.collection('表名')
.doc("這條數據的ID")
.remove()
.then(res=>{})
.catch(err=>{})
更新
db.collection('表名')
.doc("這條數據的ID")
.update({
data:{
age:34 //將這條數據的age字段修改為34
}
})
.then(res=>{})
.catch(err=>{})
單條數據查詢
//單條查詢
db.collection('表名')
.doc('這條數據的ID') //查詢單條,返回對象
.get()
.then(res=>{})
.catch(err=>{})
條件查詢
db.collection('表名')
.where({ //查詢多條,返回數組
name:"李四" // 查詢條件
})
.get()
.then(res=>{})
.catch(err=>{})
分頁查詢
db.collection('表名')
.limit(20) //限制返回幾條數據
.skip(0) //從第幾條開始讀取
.get()
.then(res=>{})
.catch(err=>{})
排序
db.collection('表名')
.orderBy('字段名','asc') //升序:asc 降序:desc
.get()
.then(res=>{})
.catch(err=>{})
比較操作符及邏輯操作符
db.collection('表名')
.where({
db.command.gt(30) //查詢值大於30的數據
})
.get()
.then(res=>{})
.catch(err=>{})
db.command.gt() 查詢大於指定值的所有數據
db.command.gte() 查詢大於等於指定值的所有數據
db.command.lt() 查詢小於指定值的所有數據
db.command.lte() 查詢小於等於指定值的所有數據
db.command.and() 邏輯與
db.command.or() 邏輯或
......
其他查詢操作參考文檔:
查詢規則
計算能力--雲函數
一段運行在雲端的代碼,無需管理服務器,在開發工具內編寫、一鍵上傳部署即可運行后端代碼。
小程序內提供了專門用於雲函數調用的 API。開發者可以在雲函數內獲取到每次調用的上下文(appid、openid 等),無需維護復雜的鑒權機制,即可獲取天然可信任的用戶登錄態(openid)。
1、雲函數與雲數據庫的對比
操作 | 雲函數 | 雲數據庫 |
---|---|---|
返回數據上限 | 100條 | 20條 |
更新數據權限 | 不受限的讀寫權限 | 只能更新或刪除自己創建的數據 |
運行環境 | 運行在雲端node.JS環境 | 運行在小程序本地 |
可實現功能 | 功能豐富 | 只能實現數據庫的增刪改查 |
2、雲函數配置與創建
在項目根目錄找到 project.config.json 文件,新增 cloudfunctionRoot 字段,該字段用來制定本地已存在的目錄作為雲開發的本地根目錄。
{
"cloudfunctionRoot": "cloudfunctions/"
}
在雲函數文件夾根目錄右鍵新建雲函數,會自動生成一個雲函數文件夾,文件夾名稱為雲函數的調用名稱。
addStudent //雲函數目錄
├── config.json //權限和定時觸發器等的配置文件
├── index.js //雲函數
├── package.json //雲函數的依賴管理
3、雲函數開發
// 雲函數入口文件
const cloud = require('wx-server-sdk')
cloud.init() //初始化雲環境
// 雲函數入口函數
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
wx-server-sdk,這是一個幫助我們在雲函數中操作數據庫、存儲以及調用其他雲函數的微信提供的庫。
雲函數的傳入參數有兩個,一個是 event 對象,一個是 context 對象。
當小程序端調用雲函數時,event 就是小程序端調用雲函數時傳入的參數,外加后端自動注入的小程序用戶的 openid 和小程序的 appid。
context 對象包含了此處調用的調用信息和運行狀態,可以用它來了解服務運行的情況。
這里我們可以使用雲開發sdk內置的getWXContext用來獲取 WX Context (微信調用上下文),包括 OPENID、APPID、及 UNIONID(需滿足 UNIONID 獲取條件)等信息。
4、在雲函數中調用數據庫
// 雲函數入口函數
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
let add = cloud.database().collection('student').add({
data:event.info
})
return add
}
5、雲函數部署
在當前雲函數根目錄右鍵一鍵部署。
6、在小程序中調用雲函數
callCoud: function() {
// 調用雲函數
//callback風格
wx.cloud.callFunction({
name: '雲函數名稱',
data: {}, // 雲函數傳參
success: res => { },
fail: err => { },
})
},
//promise風格
wx.cloud.callFunction({
name: '雲函數名稱',
data: {}, // 雲函數傳參
})
.then(res=>{})
.catch(err=>{})
},
雲開發中所有的api都支持callback風格和promise風格兩種語法。
res返回值包含:
1.requestID:雲函數執行 ID,可用於在雲開發控制台查找日志,打開雲開發控制台–雲函數–日志,可以在這里根據雲函數函數名以及 requestID 來篩選查看雲函數的調用日志(含返回結果);
2.result:雲函數返回的結果,login 雲函數返回的結果里包含 appid、event 對象,我們可以通過 res.result.appid 以及 res.result.event 訪問它們;
3.errMsg:顯示雲函數是否調用成功
6、雲函數調用調試
在network中可以看到雲函數的調用狀態及出參、入參等。
文件存儲能力--雲存儲
雲開發提供了一塊文件存儲空間,提供了上傳文件到雲端、帶權限管理的雲端下載能力,開發者可以在小程序端和雲函數端通過 API 使用雲文件存儲功能。免費容量為5G。
1、管理端操作文件
2、在小程序中上傳文件
wx.cloud.uploadFile({
cloudPath: 'cloud/example.png', // 上傳至雲端的存儲位置
filePath: '', // 小程序臨時文件路徑
success: res => {
// 返回文件 ID
console.log(res.fileID)
},
fail: console.error
})
cloudPath是文件將要存儲在雲存儲中的位置,設為'cloud/example.png'會將example.png文件存入cloud文件夾中,如果沒有cloud文件夾會自動創建一個cloud文件夾。
上傳成功后會獲得文件唯一標識符,即文件 fileID,后續操作都基於fileID來查找文件。
3、在小程序中下載文件
根據fileID下載文件,用戶只能下載其有訪問權限的文件
wx.cloud.downloadFile({
fileID: '', // 文件 ID
success: res => {
// 返回臨時文件路徑
console.log(res.tempFilePath)
},
fail: console.error
})
4、在小程序中刪除文件
每次刪除文件數的最大限制為50條。
wx.cloud.deleteFile({
fileList: ['a7xzcb'],
success: res => {
// handle success
console.log(res.fileList)
},
fail: console.error
})
雲開發中的拓展能力:
音視頻服務:實時音視頻通話服務,高清視頻通話等,基於雲開發可快速接入。
智能圖像服務:人臉識別,AI視覺能力等,基於雲開發可快速接入。
CMS內容管理:內容管理是基於雲開發搭建的可視化的內容管理平台,提供了豐富的內容管理功能,開通簡單,獨立於雲控制台,無須編寫代碼即可使用,支持文本、富文本、Markdown、圖片、文件、關聯類型等多種類型的可視化編輯,易於二次開發,並與雲開發的生態體系緊密結合,助力開發者提升開發效率。
......