數(shù)據(jù)庫初始化
初始化 const db = wx.cloud.database()
切換環(huán)境
const db = wx.cloud.database({
env: 'trailer-dev' //環(huán)境的名稱
})
為了方便編譯查看結(jié)果,不用每次都點擊云開發(fā)頁面爷贫,我們可以新建一個編譯方式,將首頁設(shè)成云開發(fā)
接著我們將數(shù)據(jù)庫初始化放到 cloud.js文件中补憾,最頂上一行
const db = wx.cloud.database() //初始化數(shù)據(jù)庫漫萄,下面可以用db訪問
在wxml中加入一個按鈕
<button bindtap="insertFunc">插入數(shù)據(jù)</button>
cloud.js page對象中加入這個綁定的方法
// 插入數(shù)據(jù)綁定的方法
insertFunc: function(){
},
在界面上點擊云開發(fā),進(jìn)入控制臺后點擊頂上的“數(shù)據(jù)庫”按鈕
點擊左邊創(chuàng)建一個user的集合
創(chuàng)建完集合后就可以通過代碼來加入內(nèi)容盈匾,插入的方法就寫成如下
// 插入數(shù)據(jù)綁定的方法
insertFunc: function(){
// 在集合user中增加一條數(shù)據(jù)
db.collection('user').add({
//插入一條數(shù)據(jù)
data: {
name: 'tommy',
age: 20
},
// 插入成功的回調(diào)函數(shù)
success: res => { //箭頭函數(shù)腾务,目的是this的指向
console.log('插入成功', res)
},
// 插入失敗的回調(diào)
fail: err => {
console.log('插入失敗', err)
}
})
},
插入成功我們就可以看到回調(diào)函數(shù)在控制臺顯示
在云開發(fā)控制臺中點擊刷新就可以看到內(nèi)容
新插入的數(shù)據(jù)中
_id是非關(guān)系型數(shù)據(jù)庫中的標(biāo)識
_openid 是指這個用戶插入的數(shù)據(jù)
而下面的字段才是我們插入的數(shù)據(jù)
同時小程序中也支持promise的寫法,同樣的內(nèi)容我們改寫一下
// 插入數(shù)據(jù)綁定的方法
insertFunc: function(){
// 在集合user中增加一條數(shù)據(jù)
// promise寫法
db.collection('user').add({
//插入一條數(shù)據(jù)
data: {
name: 'elsa',
age: 18
}
})
.then( res => {
console.log('插入成功', res)
})
.catch( err => {
console.log('插入失敗', err)
})
},
修改
接著試驗一下更新操作削饵,在wxml中加入新按鈕
<button bindtap="updateFunc">更新數(shù)據(jù)</button>
更新數(shù)據(jù)時要通過 _id 這個數(shù)據(jù)唯一標(biāo)識去修改內(nèi)容岩瘦,
例如我們將剛剛輸入的內(nèi)容修改,需要先copy它對應(yīng)的 _id窿撬,比如第一條tommy的數(shù)據(jù)
// 更新數(shù)據(jù)方法
updateFunc: function(){
const id = '0ec685215e2a585b05288efe08b2185b'
db.collection('user').doc(id) // doc方法去修改文檔
.update({ // 在對應(yīng)的文檔中用update傳入一個對象更新
data: {
age: 30
}
})
.then( res => {
console.log('更新完成', res)
})
.catch( err => {
console.log('更新失敗', err)
})
},
保存后看到界面是這樣的
這時候云數(shù)據(jù)庫中tommy仍然是20歲
點擊更新启昧,得到更新完成的提示
接著刷新一下云控制臺中的數(shù)據(jù)庫,可以看到已經(jīng)更新成30歲了
查找
我們在wxml加入查找數(shù)據(jù)的按鈕
<button bindtap="searchFunc">查找數(shù)據(jù)</button>
接著是js中處理事件
// 查找
searchFunc: function(){
db.collection('user').where({ //用where函數(shù)進(jìn)行查找
// 查詢條件
age: 18
}).get() //輸入條件后用get方法訪問
.then( res => {
console.log('查詢成功', res)
})
.catch( err => {
console.log('查詢失敗', err)
})
},
接著我們試著在控制臺中直接插入一條數(shù)據(jù)
把年齡改回18
后臺插入的數(shù)據(jù)是沒有_openid的
嘗試后臺直接在user collection中直接插入數(shù)據(jù)
插入的數(shù)據(jù)不包含 openid劈伴,在小程序的查詢中查詢不到密末,這個涉及到權(quán)限設(shè)置
我們將權(quán)限修改成所有人都可以看
確認(rèn)后
這時候在小程序中再點擊查詢就可以看到兩條記錄了
刪除
新加一個刪除按鈕
<button bindtap="deleteFunc">刪除數(shù)據(jù)</button>
同樣的刪除方法
deleteFunc: function(){
const id = '0ec685215e2a585b05288efe08b2185b' // 也是用_id的方式訪問
db.collection('user').doc(id) // doc方法去找到文檔
.remove()
.then( res => { // 成功刪除
console.log('刪除成功', res)
})
.catch( err => {
console.log('刪除失敗', err)
})
},
點擊刪除按鈕后在控制臺顯示
刪除成功
同時在云開發(fā)控制臺中就只剩兩條數(shù)據(jù)了
這個就是單條數(shù)據(jù)在小程序中的刪除
而多條數(shù)據(jù)的刪除,在小程序端是無法控制的跛璧,需要調(diào)用云函數(shù)才能進(jìn)行批量刪除
上面涉及到的函數(shù)在官方的文檔中都能找到
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html
云函數(shù)
一段運行在云端的代碼苏遥,相當(dāng)于小程序后端服務(wù)端的代碼,
這里我們不需要管理服務(wù)器赡模,只需要通過一鍵上傳部署田炭,就可以運行這些代碼
云函數(shù)要用到nodejs,所以我們需要安裝node v8.0 以上版本
在整個項目的根目錄下有個 cloudfunctions 文件夾漓柑,這個就是云函數(shù)文件夾
如果要修改名字教硫,要在packageconfig.json 這個配置中修改
在云控制臺中可以查看到我們建立的所有云函數(shù)
我們新建一個云函數(shù)
新建完成后,它會自動同步到線上辆布,并且顯示上傳結(jié)果瞬矩,在云控制臺中點擊刷新就可以看到新建的云函數(shù)
注意上傳編譯的云函數(shù)有延遲
調(diào)用云函數(shù):
在wxml中加入一個按鈕
<view>云函數(shù)</view>
<button bindtap="sum">調(diào)用云函數(shù)sum</button>
在js文件中加入該sum方法
// 云函數(shù) sum 調(diào)用
sum: function(){
console.log('云函數(shù)調(diào)用 sum')
// 在小程序端調(diào)用云函數(shù)
wx.cloud.callFunction({
name: 'sum', // 調(diào)用云函數(shù)的名稱
data: { // 接收輸入的參數(shù),等同于云函數(shù)中的內(nèi)容
a: 10, // 傳遞的event.a + event.b桉樹
b: 2
}
})
.then( res => {
console.log('調(diào)用云函數(shù) sum成功', res)
})
.catch( err => {
console.log('調(diào)用云函數(shù)錯誤', err)
})
},
點擊后可以看到調(diào)用云函數(shù)锋玲,服務(wù)器將結(jié)果返回
計算結(jié)果顯示正常
同時在云開發(fā)控制臺也可以查詢到整個云函數(shù)的調(diào)用情況
當(dāng)然也可以點擊測試景用,去看測試的結(jié)果
測試輸入的內(nèi)容,修改key
這里可以讓我們寫好云函數(shù),在寫本地調(diào)用前伞插,對云函數(shù)進(jìn)行一個測試
點擊日志刷新割粮,可以看到每次調(diào)用的結(jié)果
通過云函數(shù)獲取openid
wxml中的代碼為一個按鈕,綁定getOpenIdFunc方法
<button bindtap="getOpenIdFunc">獲取當(dāng)前用戶openID</button>
js 中寫入
// 獲取當(dāng)前用戶openId
getOpenIdFunc: function(){
wx.cloud.callFunction({
// 獲取openId是小程序原生函數(shù)
name: 'login'
})
.then( res => {
console.log('登錄成功', res)
})
.catch( err => {
console.log('登錄失敗', err)
})
} ,
寫完后記得將云函數(shù)目錄中的login目錄上傳部署媚污,因為默認(rèn)是沒有在云端安裝的
等待上傳更新權(quán)限并部署完成舀瓢,再點擊按鈕就可以在控制臺中看到登錄成功了
如果前面這步忘了上傳編譯,點擊按鈕后有可能會出現(xiàn)登錄錯誤
上傳速度由電腦速度和網(wǎng)速決定
批量刪除
因為小程序規(guī)定批量刪除數(shù)據(jù)庫中的數(shù)據(jù)耗美,只能通過云函數(shù)來執(zhí)行京髓,所以這里我們新建一個云函數(shù)
batchDelete,建立后它會自動上傳和更新權(quán)限商架,接著我們在云函數(shù)index.js中寫入代碼堰怨,整個文件如下
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
//獲取云數(shù)據(jù)庫權(quán)限
const db = cloud.database()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
try { //為了防止刪除數(shù)據(jù)庫報錯,所以套用一個try捕獲異常
// 搜索加刪除 這里是異步操作所以要用es7語法 await
return await db.collection('user').where({ // 搜索符合條件的內(nèi)容
name: 'jerry'
}).remove() // 刪除
} catch (e) { // 捕獲try的錯誤
console.error('批量刪除出錯', e)
}
}
完成后一定要記得上傳部署
然后wxml文件中加入一個新按鈕
<button bindtap="batchDelFunc">批量刪除數(shù)據(jù)</button>
js中代碼
// 批量刪除
batchDelFunc: function(){
wx.cloud.callFunction({
name: 'batchDelete' // 云函數(shù)名稱
})
.then( res => {
console.log('批量刪除成功', res)
})
.catch( err => { // 數(shù)據(jù)庫斷線或網(wǎng)絡(luò)不好時出錯
console.log('批量刪除失敗', err)
})
},
云端未刪除前的數(shù)據(jù)
刷新云數(shù)據(jù)庫后
數(shù)據(jù)只剩兩條诚些,符合 name: 'jerry' 的云數(shù)據(jù)庫內(nèi)容被刪除了