微信小程序云函數(shù)

>定義:云函數(shù)即在云端(服務(wù)器端)運(yùn)行的函數(shù)理张。在物理設(shè)計(jì)上,一個(gè)云函數(shù)可由多個(gè)文件組成召廷,占用一定量的?CPU?內(nèi)存等計(jì)算資源凳厢;各云函數(shù)完全獨(dú)立;可分別部署在不同的地區(qū)竞慢。開(kāi)發(fā)者無(wú)需購(gòu)買先紫、搭建服務(wù)器,只需編寫(xiě)函數(shù)代碼并部署到云端即可在小程序端調(diào)用筹煮,同時(shí)云函數(shù)之間也可互相調(diào)用遮精。

一個(gè)云函數(shù)的寫(xiě)法與一個(gè)在本地定義的?JavaScript?方法無(wú)異,代碼運(yùn)行在云端?Node.js?中败潦。當(dāng)云函數(shù)被小程序端調(diào)用時(shí)仑鸥,定義的代碼會(huì)被放在?Node.js?運(yùn)行環(huán)境中執(zhí)行。我們可以如在?Node.js?環(huán)境中使用?JavaScript?一樣在云函數(shù)中進(jìn)行網(wǎng)絡(luò)請(qǐng)求等操作变屁,而且我們還可以通過(guò)云函數(shù)后端?SDK?搭配使用多種服務(wù)眼俊,比如使用云函數(shù)?SDK?中提供的數(shù)據(jù)庫(kù)和存儲(chǔ)?API?進(jìn)行數(shù)據(jù)庫(kù)和存儲(chǔ)的操作,這部分可參考數(shù)據(jù)庫(kù)和存儲(chǔ)后端?API?文檔粟关。

云開(kāi)發(fā)的云函數(shù)的獨(dú)特優(yōu)勢(shì)在于與微信登錄鑒權(quán)的無(wú)縫整合疮胖。當(dāng)小程序端調(diào)用云函數(shù)時(shí),云函數(shù)的傳入?yún)?shù)中會(huì)被注入小程序端用戶的?openid闷板,開(kāi)發(fā)者無(wú)需校驗(yàn)?openid?的正確性因?yàn)槲⑿乓呀?jīng)完成了這部分鑒權(quán)澎灸,開(kāi)發(fā)者可以直接使用該?openid。

###?我的第一個(gè)云函數(shù)

我們以定義一個(gè)將兩個(gè)數(shù)字相加的函數(shù)作為我們第一個(gè)云函數(shù)的示例遮晚。

1.?在項(xiàng)目根目錄找到?project.config.json?文件性昭,新增?cloudfunctionRoot?字段,指定本地已存在的目錄作為云開(kāi)發(fā)的本地根目錄县遣。</br>

???示例

???```json

???{

??????"cloudfunctionRoot":?"cloudfunctions/"

???}

???```

???完成指定之后糜颠,云開(kāi)發(fā)根目錄的圖標(biāo)會(huì)變成?“云開(kāi)發(fā)圖標(biāo)”汹族,云函數(shù)根目錄下的第一級(jí)目錄(云函數(shù)目錄)是與云函數(shù)名字相同的,如果對(duì)應(yīng)的線上環(huán)境存在該云函數(shù)其兴,則我們會(huì)用一個(gè)特殊的?“云圖標(biāo)”?標(biāo)明


2.?接著顶瞒,我們?cè)谠坪瘮?shù)根目錄上右鍵,在右鍵菜單中元旬,可以選擇創(chuàng)建一個(gè)新的?Node.js?云函數(shù)榴徐,我們將該云函數(shù)命名為?add。開(kāi)發(fā)者工具在本地創(chuàng)建出云函數(shù)目錄和入口?index.js?文件匀归,同時(shí)在線上環(huán)境中創(chuàng)建出對(duì)應(yīng)的云函數(shù)坑资。我們可以看到類似如下的一個(gè)云函數(shù)模板:

???示例

```javascript

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

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

???cloud.init()

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

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

?????const?wxContext?=?cloud.getWXContext()

?????return?{

???????event,

???????openid:?wxContext.OPENID,

???????appid:?wxContext.APPID,

???????unionid:?wxContext.UNIONID,

?????}

???}

```

3.?云函數(shù)的傳入?yún)?shù)有兩個(gè),一個(gè)是?event?對(duì)象穆端,一個(gè)是?context?對(duì)象袱贮。event?指的是觸發(fā)云函數(shù)的事件,當(dāng)小程序端調(diào)用云函數(shù)時(shí)徙赢,event?就是小程序端調(diào)用云函數(shù)時(shí)傳入的參數(shù)字柠,外加后端自動(dòng)注入的小程序用戶的?openid?和小程序的?appid探越。context?對(duì)象包含了此處調(diào)用的調(diào)用信息和運(yùn)行狀態(tài)狡赐,可以用它來(lái)了解服務(wù)運(yùn)行的情況。在模板中也默認(rèn)?require?了?wx-server-sdk钦幔,這是一個(gè)幫助我們?cè)谠坪瘮?shù)中操作數(shù)據(jù)庫(kù)枕屉、存儲(chǔ)以及調(diào)用其他云函數(shù)的微信提供的庫(kù)。</br>

我們修改一下模板的返回值:</br>

示例

```javascript

//?...

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

??//?...

??return?{

????sum:?event.a?+?event.b

??}

}

```

4.?在小程序中調(diào)用這個(gè)云函數(shù)前鲤氢,我們還需要先將該云函數(shù)部署到云端搀擂。在云函數(shù)目錄上右鍵,在右鍵菜單中卷玉,我們可以將云函數(shù)整體打包上傳并部署到線上環(huán)境中哨颂。</br>

部署完成后,我們可以在小程序中調(diào)用該云函數(shù):

```javascript

wx.cloud.callFunction({

??//?云函數(shù)名稱

??name:?'add',

??//?傳給云函數(shù)的參數(shù)

??data:?{

????a:?1,

????b:?2,

??},

??success:?function(res)?{

????console.log(res.result.sum)?//?3

??},

??fail:?console.error

})

```

當(dāng)然相种,Promise?風(fēng)格的調(diào)用也是支持的:

```javascript

wx.cloud.callFunction({

??//?云函數(shù)名稱

??name:?'add',

??//?傳給云函數(shù)的參數(shù)

??data:?{

????a:?1,

????b:?2,

??},

})

.then(res?=>?{

??console.log(res.result)?//?3

})

.catch(console.error)

```

###?注意事項(xiàng)

>不要將cloudfunctionRoot的值設(shè)為工作文件夾威恼,將文件夾設(shè)置為云函數(shù)文件夾,文件夾會(huì)變成云環(huán)境寝并,即在代碼打包和上傳的時(shí)候會(huì)忽略云函數(shù)文件夾箫措。

工作文件夾設(shè)置為云函數(shù)文件夾報(bào)錯(cuò)截圖


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衬潦,隨后出現(xiàn)的幾起案子斤蔓,更是在濱河造成了極大的恐慌,老刑警劉巖镀岛,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弦牡,死亡現(xiàn)場(chǎng)離奇詭異友驮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)喇伯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門喊儡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人稻据,你說(shuō)我怎么就攤上這事艾猜。” “怎么了捻悯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵匆赃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我今缚,道長(zhǎng)算柳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任姓言,我火速辦了婚禮瞬项,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘何荚。我一直安慰自己囱淋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布餐塘。 她就那樣靜靜地躺著妥衣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戒傻。 梳的紋絲不亂的頭發(fā)上税手,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音需纳,去河邊找鬼芦倒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛不翩,可吹牛的內(nèi)容都是我干的兵扬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慌盯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼周霉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起亚皂,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俱箱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灭必,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體狞谱,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乃摹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跟衅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孵睬。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖伶跷,靈堂內(nèi)的尸體忽然破棺而出掰读,到底是詐尸還是另有隱情,我是刑警寧澤叭莫,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布蹈集,位于F島的核電站,受9級(jí)特大地震影響雇初,放射性物質(zhì)發(fā)生泄漏拢肆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一靖诗、第九天 我趴在偏房一處隱蔽的房頂上張望郭怪。 院中可真熱鬧,春花似錦刊橘、人聲如沸鄙才。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咒循。三九已至据途,卻和暖如春绞愚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颖医。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工位衩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熔萧。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓糖驴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親佛致。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贮缕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354