W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
開(kāi)發(fā)者可以使用云開(kāi)發(fā)開(kāi)發(fā)微信小程序、小游戲,無(wú)需搭建服務(wù)器,即可使用云端能力。
云開(kāi)發(fā)為開(kāi)發(fā)者提供完整的云端支持,弱化后端和運(yùn)維概念,無(wú)需搭建服務(wù)器,使用平臺(tái)提供的 API 進(jìn)行核心業(yè)務(wù)開(kāi)發(fā),即可實(shí)現(xiàn)快速上線和迭代,同時(shí)這一能力,同開(kāi)發(fā)者已經(jīng)使用的云服務(wù)相互兼容,并不互斥。
目前提供三大基礎(chǔ)能力支持:
新建項(xiàng)目選擇一個(gè)空目錄,填入 AppID(使用云開(kāi)發(fā)能力必須填寫 AppID),勾選創(chuàng)建 “云開(kāi)發(fā) QuickStart 項(xiàng)目”,點(diǎn)擊創(chuàng)建即可得到一個(gè)展示云開(kāi)發(fā)基礎(chǔ)能力的示例小程序。該小程序與普通 QuickStart 小程序有以下不同需注意:
注意,云開(kāi)發(fā)能力從基礎(chǔ)庫(kù) 2.2.3 開(kāi)始支持,現(xiàn)在 2.2.3 或以上的基礎(chǔ)庫(kù)沒(méi)有完全覆蓋所有用戶(目前約 90% ),如需使上傳的代碼能夠覆蓋全量用戶,請(qǐng)做以下特殊處理:
指定后云能力可以在所有基礎(chǔ)庫(kù)中使用,并且如果云能力有更新,并不會(huì)隨著基礎(chǔ)庫(kù)升級(jí)而自動(dòng)升級(jí),需在后續(xù)版本發(fā)布后重新上傳。如 2.2.4 發(fā)布后,需重新上傳才能將云能力更新至 2.2.4 版本的云能力。
創(chuàng)建了第一個(gè)云開(kāi)發(fā)小程序后,在使用云開(kāi)發(fā)能力之前需要先開(kāi)通云開(kāi)發(fā)。在開(kāi)發(fā)者工具工具欄左側(cè),點(diǎn)擊 “云開(kāi)發(fā)” 按鈕即可開(kāi)通云開(kāi)發(fā)。云開(kāi)發(fā)開(kāi)通后自動(dòng)獲得一套云開(kāi)發(fā)環(huán)境,各個(gè)環(huán)境相互隔離,每個(gè)環(huán)境都包含獨(dú)立的數(shù)據(jù)庫(kù)實(shí)例、存儲(chǔ)空間、云函數(shù)配置等資源。每個(gè)環(huán)境都有唯一的環(huán)境 ID 標(biāo)識(shí),初始創(chuàng)建的環(huán)境自動(dòng)成為默認(rèn)環(huán)境。
云開(kāi)發(fā)控制臺(tái)是管理云開(kāi)發(fā)資源的地方,控制臺(tái)提供以下能力:
一個(gè)環(huán)境對(duì)應(yīng)一整套獨(dú)立的云開(kāi)發(fā)資源,包括數(shù)據(jù)庫(kù)、存儲(chǔ)空間、云函數(shù)等。各個(gè)環(huán)境間是相互獨(dú)立的,用戶開(kāi)通云開(kāi)發(fā)后初始默認(rèn)可擁有最多兩個(gè)環(huán)境。在實(shí)際開(kāi)發(fā)中,建議每一個(gè)正式環(huán)境都搭配一個(gè)測(cè)試環(huán)境,所有功能先在測(cè)試環(huán)境測(cè)試完畢后再上到正式環(huán)境。以初始可創(chuàng)建的兩個(gè)環(huán)境為例,建議一個(gè)創(chuàng)建為 test 測(cè)試環(huán)境,一個(gè)創(chuàng)建為 release 正式環(huán)境。
小程序·云開(kāi)發(fā)提供了三個(gè)基礎(chǔ)能力:數(shù)據(jù)庫(kù)、存儲(chǔ)和云函數(shù),這一章節(jié)我們介紹下這幾個(gè)能力分別是什么,我們能用他來(lái)做什么。
云開(kāi)發(fā)提供了一個(gè) JSON 數(shù)據(jù)庫(kù),顧名思義,數(shù)據(jù)庫(kù)中的每條記錄都是一個(gè) JSON 格式的對(duì)象。一個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)集合(相當(dāng)于關(guān)系型數(shù)據(jù)中的表),集合可看做一個(gè) JSON 數(shù)組,數(shù)組中的每個(gè)對(duì)象就是一條記錄,記錄的格式是 JSON 對(duì)象。
關(guān)系型數(shù)據(jù)庫(kù)和 JSON 數(shù)據(jù)庫(kù)的概念對(duì)應(yīng)關(guān)系如下表:
關(guān)系型 | 文檔型 |
---|---|
數(shù)據(jù)庫(kù) database | 數(shù)據(jù)庫(kù) database |
表 table | 集合 collection |
行 row | 記錄 record / doc |
列 column | 字段 field |
以下是一個(gè)示例的集合數(shù)據(jù),假設(shè)我們有一個(gè) books 集合存放了圖書(shū)記錄,其中有兩本書(shū):
[
{
"_id": "Wzh76lk5_O_dt0vO",
"title": "The Catcher in the Rye",
"author": "J. D. Salinger",
"characters": [
"Holden Caulfield",
"Stradlater",
"Mr. Antolini"
],
"publishInfo": {
"year": 1951,
"country": "United States"
}
},
{
"_id": "Wzia0lk5_O_dt0vR",
"_openid": "ohl4L0Rnhq7vmmbT_DaNQa4ePaz0",
"title": "The Lady of the Camellias",
"author": "Alexandre Dumas fils",
"characters": [
"Marguerite Gautier",
"Armand Duval",
"Prudence",
"Count de Varville"
],
"publishInfo": {
"year": 1848,
"country": "France"
}
}
]
在圖書(shū)信息中,我們用 title, author 來(lái)記錄圖書(shū)標(biāo)題和作者,用 characters 數(shù)組來(lái)記錄書(shū)中的主要人物,用 publishInfo 來(lái)記錄圖書(shū)的出版信息。在其中我們可以看到,字段既可以是字符串或數(shù)字,還可以是對(duì)象或數(shù)組,就是一個(gè) JSON 對(duì)象。
每條記錄都有一個(gè) _id 字段用以唯一標(biāo)志一條記錄、一個(gè) _openid 字段用以標(biāo)志記錄的創(chuàng)建者,即小程序的用戶。需要特別注意的是,在管理端(控制臺(tái)和云函數(shù))中創(chuàng)建的不會(huì)有 _openid 字段,因?yàn)檫@是屬于管理員創(chuàng)建的記錄。開(kāi)發(fā)者可以自定義 _id,但不可自定義和修改 _openid。_openid 是在文檔創(chuàng)建時(shí)由系統(tǒng)根據(jù)小程序用戶默認(rèn)創(chuàng)建的,開(kāi)發(fā)者可使用其來(lái)標(biāo)識(shí)和定位文檔。
數(shù)據(jù)庫(kù) API 分為小程序端和服務(wù)端兩部分,小程序端 API 擁有嚴(yán)格的調(diào)用權(quán)限控制,開(kāi)發(fā)者可在小程序內(nèi)直接調(diào)用 API 進(jìn)行非敏感數(shù)據(jù)的操作。對(duì)于有更高安全要求的數(shù)據(jù),可在云函數(shù)內(nèi)通過(guò)服務(wù)端 API 進(jìn)行操作。云函數(shù)的環(huán)境是與客戶端完全隔離的,在云函數(shù)上可以私密且安全的操作數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù) API 包含增刪改查的能力,使用 API 操作數(shù)據(jù)庫(kù)只需三步:獲取數(shù)據(jù)庫(kù)引用、構(gòu)造查詢/更新條件、發(fā)出請(qǐng)求。以下是一個(gè)在小程序中查詢數(shù)據(jù)庫(kù)的發(fā)表于美國(guó)的圖書(shū)記錄的例子:
// 1. 獲取數(shù)據(jù)庫(kù)引用
const db = wx.cloud.database()
// 2. 構(gòu)造查詢語(yǔ)句
// collection 方法獲取一個(gè)集合的引用
// where 方法傳入一個(gè)對(duì)象,數(shù)據(jù)庫(kù)返回集合中字段等于指定值的 JSON 文檔。API 也支持高級(jí)的查詢條件(比如大于、小于、in 等),具體見(jiàn)文檔查看支持列表
// get 方法會(huì)觸發(fā)網(wǎng)絡(luò)請(qǐng)求,往數(shù)據(jù)庫(kù)取數(shù)據(jù)
db.collection('books').where({
publishInfo: {
country: 'United States'
}
}).get({
success: function(res) {
// 輸出 [{ "title": "The Catcher in the Rye", ... }]
console.log(res)
}
})
更多的數(shù)據(jù)庫(kù)的 API 的使用和數(shù)據(jù)庫(kù)管理,可以參考數(shù)據(jù)庫(kù)指引章節(jié)。
云開(kāi)發(fā)提供了一塊存儲(chǔ)空間,提供了上傳文件到云端、帶權(quán)限管理的云端下載能力,開(kāi)發(fā)者可以在小程序端和云函數(shù)端通過(guò) API 使用云存儲(chǔ)功能。
在小程序端可以分別調(diào)用 wx.cloud.uploadFile 和 wx.cloud.downloadFile 完成上傳和下載云文件操作。下面簡(jiǎn)單的幾行代碼,即可實(shí)現(xiàn)在小程序內(nèi)讓用戶選擇一張圖片,然后上傳到云端管理的功能:
// 讓用戶選擇一張圖片
wx.chooseImage({
success: chooseResult => {
// 將圖片上傳至云存儲(chǔ)空間
wx.cloud.uploadFile({
// 指定上傳到的云路徑
cloudPath: 'my-photo.png',
// 指定要上傳的文件的小程序臨時(shí)文件路徑
filePath: chooseResult.tempFilePaths[0],
// 成功回調(diào)
success: res => {
console.log('上傳成功', res)
},
})
},
})
上傳完成后可在控制臺(tái)中看到剛上傳的圖片。
更多的存儲(chǔ) API 和管理,可以參考存儲(chǔ)指引章節(jié)。
云函數(shù)是一段運(yùn)行在云端的代碼,無(wú)需管理服務(wù)器,在開(kāi)發(fā)工具內(nèi)編寫、一鍵上傳部署即可運(yùn)行后端代碼。
小程序內(nèi)提供了專門用于云函數(shù)調(diào)用的 API。開(kāi)發(fā)者可以在云函數(shù)內(nèi)使用 wx-server-sdk 提供的 getWXContext 方法獲取到每次調(diào)用的上下文(appid、openid 等),無(wú)需維護(hù)復(fù)雜的鑒權(quán)機(jī)制,即可獲取天然可信任的用戶登錄態(tài)(openid)。
比如我們?nèi)缦露x一個(gè)云函數(shù),命名為 add ,功能是將傳入的兩個(gè)參數(shù) a 和 b 相加:
// index.js 是入口文件,云函數(shù)被調(diào)用時(shí)會(huì)執(zhí)行該文件導(dǎo)出的 main 方法
// event 包含了調(diào)用端(小程序端)調(diào)用該函數(shù)時(shí)傳過(guò)來(lái)的參數(shù),同時(shí)還包含了可以通過(guò) getWXContext 方法獲取的用戶登錄態(tài) `openId` 和小程序 `appId` 信息
const cloud = require('wx-server-sdk')
exports.main = (event, context) => {
let { userInfo, a, b} = event
let { OPENID, APPID } = cloud.getWXContext() // 這里獲取到的 openId 和 appId 是可信的
let sum = a + b
return {
OPENID,
APPID,
sum
}
}
在開(kāi)發(fā)者工具中上傳部署云函數(shù)后,我們?cè)谛〕绦蛑锌梢赃@么調(diào)用:
wx.cloud.callFunction({
// 需調(diào)用的云函數(shù)名
name: 'add',
// 傳給云函數(shù)的參數(shù)
data: {
a: 12
b: 19,
},
// 成功回調(diào)
complete: console.log
})
// 當(dāng)然 promise 方式也是支持的
wx.cloud.callFunction({
name: 'add',
data: {
a: 12,
b: 19
}
}).then(console.log)
如需在云函數(shù)中操作數(shù)據(jù)庫(kù)、管理云文件、調(diào)用其他云函數(shù)等操作,可使用官方提供的 npm 包 wx-server-sdk 進(jìn)行操作
更多的云函數(shù)管理和 API,可以參考云函數(shù)指引章節(jié)。
通過(guò)這個(gè)章節(jié),我們已經(jīng)了解了云開(kāi)發(fā)是什么,提供了哪些能力,能做什么,接下來(lái)跟著我們一起進(jìn)入開(kāi)發(fā)指引的章節(jié),看看如何上手開(kāi)發(fā)吧!
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: