小程序云開發(fā)小計(jì)

前言

最近申請(qǐng)了個(gè)人小程序,來做一些記錄,最初打算使用localstorage存在本地就齊活兒了,可是要接定時(shí)推送,就選擇了云開發(fā)。之前用的云開發(fā)是團(tuán)隊(duì)搭建過的,這次嘗試自己從頭來一遍,熟悉一下整個(gè)流程,順便蹚蹚雷。

技術(shù)棧:uniapp v3

開發(fā)

第一步

首先肯定是開通服務(wù),開發(fā)者工具里點(diǎn)擊云開發(fā),里面會(huì)有開通提示,一步一步走下去就能正常開通了。


image.png

設(shè)置云函數(shù)路徑

manifest.json里設(shè)置"cloudfunctionRoot": "cloudfunctions/",云函數(shù)可以寫在這里,函數(shù)名稱為文件夾,內(nèi)容結(jié)構(gòu)為config.json、index.js、package.json,具體內(nèi)容見下面圖示例
config.json是聲明函數(shù)的配置信息,比如接口權(quán)限、定時(shí)觸發(fā)器等;
index.js名稱可以修改,是云函數(shù)執(zhí)行入口;
package.json就是云函數(shù)的具體信息和依賴,執(zhí)行入口可以在里面修改。

image.png

新建云函數(shù)

這里需要注意的是,uniapp項(xiàng)目在本地新建的文件夾是沒有辦法同步到云函數(shù)列表去的。云函數(shù)的新建可以在云開發(fā)后臺(tái),也可以在開發(fā)者工具里,點(diǎn)擊右鍵有新建云函數(shù)。如果是在后臺(tái)建的函數(shù),可以點(diǎn)擊同步云函數(shù)列表。

image.png

uniapp在編譯的時(shí)候,cloudfunctions文件夾是不會(huì)編譯到小程序的路徑里去的,這就導(dǎo)致一開始的時(shí)候不知道該怎么去新建函數(shù)。如果此時(shí)在開發(fā)者工具里新建cloudfunctions文件夾,也是可用的,只是文件夾被建在了dist下面,無法同步代碼,因此大聰明選擇了cp -rf cloudfunctions/ dist/dev/mp-weixin/cloudfunctions把它整個(gè)copy過去,###口袋空空大口大口###這時(shí)候開發(fā)者工具里就有我建好的云函數(shù)了。如果文件是新增的沒有部署過,需要右鍵選擇云函數(shù)增量上傳,發(fā)布部署就可以調(diào)用了。
image.png

\color{red}{云函數(shù)修改之后,一定要重新上傳部署,否則是無法執(zhí)行更新的。}

調(diào)用云函數(shù)

云函數(shù)在調(diào)用之前需要先初始化,否則會(huì)報(bào)錯(cuò)Error: errCode: -1 | errMsg: Cloud API isn't enabled, please call wx.cloud.init first 請(qǐng)先調(diào)用 wx.cloud.init() 完成初始化后再調(diào)用其他云 API。

wx.cloud.init({
  env: 'XXXXXX'
});

// 執(zhí)行云函數(shù)
wx.cloud.callFunction({
    name: 'funcitonname', // 對(duì)應(yīng)云函數(shù)的文件夾名稱
    data: 'params', // 傳參
    success: res => {
        console.log('云函數(shù)調(diào)用成功,返回?cái)?shù)據(jù)res:', res);
    },
    fail: err => {
        console.error('云函數(shù)調(diào)用失敗', err);
    },
});

通知

通過小程序訂閱消息subscribeMessage.send來實(shí)現(xiàn),需要在小程序里授權(quán)訂閱消息requestSubscribeMessage,詳見文檔。

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk');

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }); // 使用當(dāng)前云環(huán)境

// 云函數(shù)入口函數(shù)
exports.main = async event => {
    await cloud.openapi.subscribeMessage.send({
        touser: openid,
        page: 'pages/index/index',
        data: {
            thing1: {
                value: goods.data[0].name
            },
            date3: {
                value: goods.data[0].expire
            }
        },
        miniprogram_state: 'formal', 
        templateId: 'templateid'
      });
    }

    return 'success';
};

定時(shí)器

通知實(shí)現(xiàn)了之后,就是定時(shí)推送了,我希望實(shí)現(xiàn)的是每天早上10點(diǎn)發(fā)推送,這里用到了云函數(shù)的定時(shí)觸發(fā)器,根據(jù)文檔介紹,修改一下配置。

// config.json
{
    "permissions": {
        "openapi": []
    },
    "triggers": [
        {
            "name": "expireNoticeTrigger",
            "type": "timer",
            "config": "0 0 10 * * * *"
        }
    ]
}

然而,只是這樣的話,并不會(huì)如我們所期待的那樣定時(shí)執(zhí)行。因?yàn)橛|發(fā)器需要單獨(dú)上傳,config.json右鍵選擇上傳觸發(fā)器就可以正常執(zhí)行了。

image.png

結(jié)語

到此處,需求基本實(shí)現(xiàn),云開發(fā)并沒有想象的復(fù)雜,但是開發(fā)過程中還是有很多的細(xì)節(jié)點(diǎn)需要注意。至于云函數(shù)的內(nèi)容,就是通過數(shù)據(jù)庫做一些基礎(chǔ)的crud,官方文檔介紹的比較詳細(xì),有需要的可以看看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容