微信小程序使用云函數(shù)操作數(shù)據(jù)庫

# 一秕铛、創(chuàng)建一個云開發(fā)的小程序

## 1. 如下圖所示創(chuàng)建小程序

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818084851626.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 2. 刪除無關(guān)文件

刪除前:

![在這里插入圖片描述](https://img-blog.csdnimg.cn/2020081808502252.png#pic_center)

刪除后:

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818085156316.png#pic_center)

## 3. 刪除無關(guān)代碼

`index.wxml` `index.wxss` 內(nèi)的代碼全部清空,`index.js`保留如下:

```index.js

Page({

})

```

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818085442731.png#pic_center)

`app.json`刪除無關(guān)代碼缩挑,如下:

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818085748146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 4. 配置云函數(shù)存儲目錄

在`project.config.json`中新增如下代碼

```

"cloudfunctionRoot":"cloud",

```

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818085851769.png#pic_center)

在根目錄下創(chuàng)建同名文件夾但两,發(fā)現(xiàn)其有云朵標(biāo)識

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818085949202.png#pic_center)

## 5. 云開發(fā)環(huán)境初始化

點擊云開發(fā)—>設(shè)置,復(fù)制你的環(huán)境ID

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818090314311.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

在`app.js`中供置,刪除所有代碼谨湘,并新增如下:

```

App({

? onLaunch: function () {

? ? wx.cloud.init({

? ? ? env:"cloud-learning-i44qm"http://你的環(huán)境ID

? ? })

? }

})

```

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818092006170.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 6. 創(chuàng)建并上傳一個云函數(shù)

我們以最簡單的求和函數(shù)為例

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818092045766.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

輸入`add`并回車

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818092133669.png#pic_center)

在上圖的`index.js`中改變代碼如下:

```

// 云函數(shù)入口文件

const cloud = require('wx-server-sdk')

cloud.init()

// 云函數(shù)入口函數(shù)

exports.main = async (event, context) => {

? let a = event.a;

? let b = event.b;

? return a+b;

}

```

寫完代碼后,記得 Ctrl+s 保存芥丧,然后點擊如下圖所示:

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818092500381.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

出現(xiàn)下圖紧阔,則上傳成功![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818092523660.png#pic_center)

## 7. 使用云函數(shù)

以下皆在page下的index頁面操作

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818093124592.png#pic_center)

`index.wxml`中

```

<button bindtap="getSum">云函數(shù)的求和運算</button>

```

`index.js`中

```

Page({

? getSum() {

? ? wx.cloud.callFunction({

? ? ? name:"add",

? ? ? data:{

? ? ? ? a:5,

? ? ? ? b:6

? ? ? },

? ? ? success(res){

? ? ? ? console.log("請求成功!", res)

? ? ? },

? ? ? fail(res){

? ? ? ? console.log("請求失斝!擅耽!",res)

? ? ? }

? ? })

? }

})

```

8. 測試云函數(shù)調(diào)用是否成功

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818093350787.png#pic_center)

## 8. 進階測試

`index.wxml`中

```

<input bindinput="handleInput1" placeholder="數(shù)字1"></input>

<input bindinput="handleInput2" placeholder="數(shù)字2"></input>

<button bindtap="getSum">云函數(shù)的求和運算</button>

```

`index.js`中

```

let a = 0

let b = 0

Page({

? handleInput1(event) {

? ? //console.log(event.detail.value)

? ? a = event.detail.value

? },

? handleInput2(event) {

? ? //console.log(event.detail.value)

? ? b = event.detail.value

? },

? getSum() {

? ? wx.cloud.callFunction({

? ? ? name: "add",

? ? ? data: {

? ? ? ? a: a - '',

? ? ? ? b: b - ''

? ? ? },

? ? ? success(res) {

? ? ? ? console.log("請求成功!", res)

? ? ? },

? ? ? fail(res) {

? ? ? ? console.log("請求失斘镉觥乖仇!", res)

? ? ? }

? ? })

? }

})

```

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818094114663.png#pic_center)

![在這里插入圖片描述](https://img-blog.csdnimg.cn/2020081809405454.png#pic_center)

# 二、使用云函數(shù)獲取用戶openid

## 1. 創(chuàng)建一個新的頁面`getopenid`

如下圖:

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818095349654.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 2. 創(chuàng)建云函數(shù)`getopenid`

里面的代碼不用改動询兴,使用默認的就可以

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818095617698.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 3. `getopenid.wxml`

```

<button bindtap="getopenid">getopenid</button>

```

## 4. `getopenid.js`

```

Page({

? onLoad(){

? ? wx.cloud.callFunction({

? ? ? name:"getopenid",

? ? ? data:{

? ? ? },

? ? ? success(res) {

? ? ? ? console.log("獲取openid成功乃沙!", res)

? ? ? ? console.log("openid是:", res.result.openid)

? ? ? },

? ? ? fail(res) {

? ? ? ? console.log("獲取openid失敗诗舰!", res)

? ? ? }

? ? })

? }

})

```

## 5. 測試

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818095738693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

# 二警儒、通過云數(shù)據(jù)庫API獲取云數(shù)據(jù)庫數(shù)據(jù)

## 1. 新建測試數(shù)據(jù)

在云數(shù)據(jù)庫中隨便新建幾條數(shù)據(jù)![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818101955175.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 2. 新建測試頁面

新建頁面`cloudfunctionVSdatabaseAPI`

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818101632569.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 3. 創(chuàng)建測試按鍵

`cloudfunctionVSdatabaseAPI.wxml`中

```

<button bindtap="shujuku">數(shù)據(jù)庫API獲取數(shù)據(jù)</button>

```

`cloudfunctionVSdatabaseAPI.js`中

```

Page({

? shujuku(){

? ? wx.cloud.database().collection("pk").get({

? ? ? success(res) {

? ? ? ? console.log("數(shù)據(jù)庫API獲取數(shù)據(jù)成功!", res)

? ? ? },

? ? ? fail(res) {

? ? ? ? console.log("數(shù)據(jù)庫API獲取數(shù)據(jù)失斂舾冷蚂!", res)

? ? ? }

? ? })

? }

})

```

## 4. 測試

點擊按鍵`數(shù)據(jù)庫API獲取數(shù)據(jù)`,發(fā)現(xiàn)控制臺如下輸出:

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818103343412.png#pic_center)

此時汛闸,我們發(fā)現(xiàn)數(shù)據(jù)庫中明明有數(shù)據(jù)但通過數(shù)據(jù)庫API獲取不到蝙茶,為什么呢?

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818103445206.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

原因是權(quán)限不夠诸老,如果我們更新權(quán)限隆夯,讓所有用戶都可以獲取,會怎么樣呢别伏?

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818103554484.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818103609591.png#pic_center)

## 5. 結(jié)論

可以看到蹄衷,我們現(xiàn)在獲取到了想要的數(shù)據(jù),我們也發(fā)現(xiàn)了通過數(shù)據(jù)庫API獲取數(shù)據(jù)的局限性厘肮。

# 三愧口、通過云函數(shù)獲取云數(shù)據(jù)庫數(shù)據(jù)

## 1. 云數(shù)據(jù)庫就可以直接獲取數(shù)據(jù)庫里的數(shù)據(jù),為什么這么做类茂?

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818100024885.png#pic_center)

## 2. 說明

本例延續(xù)上例中的`cloudfunctionVSdatabaseAPI`頁面

## 3. 創(chuàng)建云函數(shù)

利用上述方法創(chuàng)建云函數(shù)`cloudfunctionVSdatabaseAPI`

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818104300955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

云函數(shù)`cloudfunctionVSdatabaseAPI.js`中的代碼:

```

// 云函數(shù)入口文件

const cloud = require('wx-server-sdk')

cloud.init()

// 云函數(shù)入口函數(shù)

exports.main = async (event, context) => {

? return cloud.database().collection("pk").get();

}

```

記得上傳并部署耍属,注意這里沒有`wx.`

云函數(shù)調(diào)用:`cloud.database().collection("pk").get();`

本地調(diào)用:`wx.cloud.database().collection("pk").get();`

## 4. 創(chuàng)建測試按鍵

`cloudfunctionVSdatabaseAPI.wxml`中

```

<button bindtap="shujuku">數(shù)據(jù)庫API獲取數(shù)據(jù)</button>

<button bindtap="yunhanshu">云函數(shù)獲取數(shù)據(jù)</button>

```

`cloudfunctionVSdatabaseAPI.js`中

```

Page({

? shujuku(){

? ? wx.cloud.database().collection("pk").get({

? ? ? success(res) {

? ? ? ? console.log("數(shù)據(jù)庫API獲取數(shù)據(jù)成功托嚣!", res)

? ? ? },

? ? ? fail(res) {

? ? ? ? console.log("數(shù)據(jù)庫API獲取數(shù)據(jù)失敗厚骗!", res)

? ? ? }

? ? })

? },

? yunhanshu(){

? ? wx.cloud.callFunction({

? ? ? name:"cloudfunctionVSdatabaseAPI",

? ? ? success(res) {

? ? ? ? console.log("云函數(shù)獲取數(shù)據(jù)成功示启!", res)

? ? ? },

? ? ? fail(res) {

? ? ? ? console.log("云函數(shù)獲取數(shù)據(jù)失敗领舰!", res)

? ? ? }

? ? })

? }

})

```

## 5. 測試

首先更改云數(shù)據(jù)庫的權(quán)限為僅創(chuàng)建者可讀寫

![](https://img-blog.csdnimg.cn/20200818105244679.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

點擊兩個按鍵

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818105303589.png#pic_center)

控制臺輸出如下:同樣的夫嗓,數(shù)據(jù)庫API不可以獲取到數(shù)據(jù),而云函數(shù)可以

![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818105333789.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

## 6. 注意事項

如果你的云開發(fā)有多套環(huán)境冲秽,在初始化時應(yīng)指明舍咖,如下:

在下圖文件中![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200818105730727.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmRhMzI1,size_16,color_FFFFFF,t_70#pic_center)

```

// 云函數(shù)入口文件

const cloud = require('wx-server-sdk')

cloud.init({

? env: "cloud-learning-i44qm"

})

// 云函數(shù)入口函數(shù)

exports.main = async (event, context) => {

? return cloud.database().collection("pk").get();

}

```

## 7. 云函數(shù)調(diào)用數(shù)據(jù)庫的應(yīng)用

短信發(fā)送,郵件發(fā)送锉桑,復(fù)雜數(shù)據(jù)運算

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末排霉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刨仑,更是在濱河造成了極大的恐慌郑诺,老刑警劉巖夹姥,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杉武,死亡現(xiàn)場離奇詭異,居然都是意外死亡辙售,警方通過查閱死者的電腦和手機轻抱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旦部,“玉大人祈搜,你說我怎么就攤上這事∈堪耍” “怎么了容燕?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婚度。 經(jīng)常有香客問我蘸秘,道長,這世上最難降的妖魔是什么蝗茁? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任醋虏,我火速辦了婚禮,結(jié)果婚禮上哮翘,老公的妹妹穿的比我還像新娘颈嚼。我一直安慰自己,他們只是感情好饭寺,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布阻课。 她就那樣靜靜地躺著叫挟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柑肴。 梳的紋絲不亂的頭發(fā)上霞揉,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音晰骑,去河邊找鬼适秩。 笑死,一個胖子當(dāng)著我的面吹牛硕舆,可吹牛的內(nèi)容都是我干的秽荞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抚官,長吁一口氣:“原來是場噩夢啊……” “哼扬跋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凌节,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤钦听,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倍奢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朴上,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年卒煞,在試婚紗的時候發(fā)現(xiàn)自己被綠了痪宰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡畔裕,死狀恐怖衣撬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扮饶,我是刑警寧澤具练,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站甜无,受9級特大地震影響扛点,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毫蚓,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一占键、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧元潘,春花似錦畔乙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽返咱。三九已至,卻和暖如春牍鞠,著一層夾襖步出監(jiān)牢的瞬間咖摹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工难述, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萤晴,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓胁后,卻偏偏與公主長得像店读,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子攀芯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353