小程序云開發初探(小結)

云開發是微信平臺新開放的功能,為開發者提供集成了服務器,數據庫和資源存儲的云服務。這篇文章主要介紹了小程序云開發初探(小結),感興趣的小伙伴們可以參考一下

云開發是微信平臺新開放的功能,為開發者提供集成了服務器,數據庫和資源存儲的云服務。本文將基于官方文檔,以一個小例子來作為探索云開發的相關功能。

云開發官方文檔

一、新建云開發項目新建項目

將微信開發助手更新之后,選擇云開發模板。

項目目錄

項目目錄分為了2大塊內容:cloudfunctions(云函數)和miniprogram。miniprogram存放的是和普通開發相同的業務代碼和資源,cloudfunctions中則存放了可以上傳至云端的代碼,在云開發中被稱為云函數。
云開發模板建立之后,會帶有一些相關例子可以熟悉api。

二、控制臺

微信開發者工具更新之后,在工具欄上會有一個控制臺入口,點擊可出現以下面板,可查看相關數據情況。

概覽

概覽界面如上圖所示,展示了該 云開發項目下使用云資源的統計數據。

用戶管理

凡是訪問過云項目的用戶,都會在用戶管理下留有訪問記錄。前提是該小程序在app.js中設置traceUser:true,表示允許記錄用戶信息。

wx.cloud.init({
    env:'......',
    traceUser: true,
  })

數據庫

數據庫是控制臺中最常用的功能之一,在該界面下,可以快速建立數據集合,可以理解為數據表。可在控制臺中建立新的集合,添加記錄有三種方式:控制臺手動添加、文件導入以及調用api。調用api會在每條記錄中自動插入用戶_openid。

存儲管理

存儲管理可保存小程序端上傳的文件,可通過調用api進行上傳,上傳名稱和路徑需要自己定義。

云函數

云函數對cloudfunctions中上傳的函數進行管理,可進行調試,查看調用日志等信息。

云函數添加方式有2種,可視化添加與IDE添加,可視化添加的云函數直接上傳至了云端,IDE中添加需要上傳部署才可以調用。如果要刪除云函數,在控制臺刪除之后,IDE中同步云函數列表即可。

統計分析

統計分析對云服務的調用情況有針對得給出了數據。

三、環境配置

api會在每條記錄中自動插入用戶_openid。

項目初始化需要在app.js中進行配置,env中填寫的就是自主配置的環境ID。

wx.cloud.init({
env:'mina-cloud-test001'
})

四、實際應用

本例以上傳書籍信息為實際應用,實現基本的書籍信息增刪改查功能,以及圖片的上傳刪除。

讀取數據庫數據

先通過調用wx.cloud.database();獲取數據庫所有集合,然后通過查詢具體集合的方式獲取數據。

const db = wx.cloud.database();
  const _ = db.command;

  db.collection('bookList').get().then(res => {
    console.log('get', res)
    self.setData({
      bookList: res.data
    });
  })

增加數據

const db = wx.cloud.database();
  const _ = db.command;

  db.collection('bookList').add({
    data: {
     bookMes: self.data.bookMes
    }
  }).then(res => {
    console.log(res)     
  })

刪除數據

<pre class="brush:js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background: rgb(255, 255, 255); width: 640px; line-height: 20px; clear: both; font-size: 14px; border-left: 3px solid rgb(108, 226, 108);"> db.collection('bookList').doc(id).remove().then(res => {
    console.log(res)
    wx.showToast({
      title: '刪除成功!',
    })
    self.getBook();
    }).catch(err => {
      console.log('err', res)
    })
  })</pre>

增加數據

<pre class="brush:js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background: rgb(255, 255, 255); width: 640px; line-height: 20px; clear: both; font-size: 14px; border-left: 3px solid rgb(108, 226, 108);"> const db = wx.cloud.database();
  const _ = db.command;

  db.collection('bookList').doc(id).remove().then(res => {
    console.log(res)
    }).catch(err => {
      console.log('err', res)
    })
  })</pre>

改變數據

<pre class="brush:js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background: rgb(255, 255, 255); width: 640px; line-height: 20px; clear: both; font-size: 14px; border-left: 3px solid rgb(108, 226, 108);">  const db = wx.cloud.database();
  const _ = db.command

  db.collection('bookList').doc(self.data.currentId).update({
    data: {
     bookMes:self.data.bookMes
    }
  }).then(res=>{
    console.log('update',res)
    self.getBook();
  }).catch(console.error)</pre>

查詢數據&調用云函數

查詢數據采用云函數為例

先在云函數中定義查詢函數,每個需要調用云開發api的云函數都必須使用wx-server-sdk,當新創建一個云函數時,項目會提示是否需要使用依賴,選擇是則會自動安裝wx-server-sdk
函數中的event參數代表由小程序端傳遞過來的參數,除此之外默認包含了userInfo,可用來做用戶鑒權操作。

<pre class="brush:js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background: rgb(255, 255, 255); width: 640px; line-height: 20px; clear: both; font-size: 14px; border-left: 3px solid rgb(108, 226, 108);"> //云函數入口文件
  const cloud = require('wx-server-sdk')
  cloud.init()
  const db = cloud.database()
  const _ = db.command

  //云函數函數入口
  exports.main = async (event, context) => {
    return db.collection('bookList').where({
      'bookMes.name': _.eq(event.bookMes.name),
      'bookMes.chooseTags':_.in(event.bookMes.chooseTags)
  }).get({
    success:function(res){
     return res
    }
   })
  }</pre>

小程序端引用云函數,name為云函數文件夾的名稱,data中存放的是傳遞給云函數的參數,云函數通過event獲取:

<pre class="brush:js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background: rgb(255, 255, 255); width: 640px; line-height: 20px; clear: both; font-size: 14px; border-left: 3px solid rgb(108, 226, 108);"> wx.cloud.callFunction({
    name: 'searchBook',
    // 傳給云函數的參數
    data: {
      bookMes: self.data.bookMes
    }
  }).then(res => {
    console.log('search',res.result.data)
    self.setData({
      bookList:res.result.data
    })
  })</pre>

本文中的api使用方式僅為示例,實際上服務端的api比小程序端的api豐富,實現功能更多。建議設計文件存儲、數據庫增刪改查的操作都在云函數中進行。

上傳圖片

上傳圖片需要先調用wx.chooseImage返回的filePath參數,然后自主定義cloudPath,即上傳至云端的地址。

<pre class="brush:js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background: rgb(255, 255, 255); width: 640px; line-height: 20px; clear: both; font-size: 14px; border-left: 3px solid rgb(108, 226, 108);"> choose() {
    let self = this
    wx.chooseImage({
      count: 1, // 默認9
      sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有
      sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有
      success: function (res) {
      // console.log(res.tempFilePaths[0])
      // 返回選定照片的本地文件路徑列表,tempFilePath可以作為img標簽的src屬性顯示圖片
        self.setData({
          bookPic: res.tempFilePaths[0]
        })
      }
    })
  },
  upload(){
    let self = this
    const filePath = self.data.bookPic
    let myDate = new Date();
    let time = '' + myDate.getFullYear() + (myDate.getMonth() + 1) + myDate.getDate() + myDate.getHours() + myDate.getMinutes() + myDate.getSeconds();
    const cloudPath = 'book-image' + time + filePath.match(/\.[^.]+?$/)[0];

    return wx.cloud.uploadFile({
      cloudPath,
      filePath,
    }).then(res => {
      console.log('upload', res)
      let bookMes = self.data.bookMes;
      bookMes.bookPic = res.fileID;
      return self.setData({
        bookMes
      });
    }).catch(err => {
      console.log('error',err)
    })
  }</pre>

刪除圖片

刪除圖片或其他文件需要具體的fileId,可通過查詢得到,通過該fileID進行刪除。

<pre class="brush:js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background: rgb(255, 255, 255); width: 640px; line-height: 20px; clear: both; font-size: 14px; border-left: 3px solid rgb(108, 226, 108);"> wx.cloud.deleteFile({
    fileList: [fileId],
    success: res => {
      console.log('delete', res.fileList)
    },
    fail: err => {
      console.log('deleteE', err)
    }
  })</pre>

五、發現存在的問題

在實際寫例子的過程中,也發現了一些問題,因為云開發的功能開放不久,功能并不是很完善,總結了一些發現的小問題:

  • 數據庫暫不支持模糊查詢
  • 數據庫集合之間無法關聯
  • 上傳圖片如果cloudPath和之前的圖片一致的話,返回結果雖然現實成功,但實際替換成了之前的舊圖
  • globalData定義方法發生改變,無法與onLaunch同級進行定義。

六、結語

關于云開發,官方文檔給出的說明比較詳細,仔細閱讀文檔可以較快速得實現上手應用。但由于目前其功能的局限性,較為復雜的公司業務不適合采用該模式進行開發,適合個人小型業務采用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容

  • 給提問的開發者的建議:提問之前先查詢 文檔、通過社區右上角搜索搜索已經存在的問題。 寫一個簡明扼要的標題,并且...
    極樂叔閱讀 13,551評論 0 3
  • 點擊查看原文 Web SDK 開發手冊 SDK 概述 網易云信 SDK 為 Web 應用提供一個完善的 IM 系統...
    layjoy閱讀 13,853評論 0 15
  • 2018年10月11日 喜歡——胡子喜歡代替送禮物寫信比心親親用胡子吊著禮物送給女朋友。和女朋友親親的時候,胡子扎...
    控期待的蛋閱讀 164評論 0 0
  • 有一個家庭,他們極度不相信自己的兒子會找到一個很好的女朋友。但意外的是他找了,家里也是不同意的。 于是他們就各種給...
    愛夢的我閱讀 75評論 0 0
  • 熊志軍~【日精進打卡第437天】 7月25號卡 付達新商貿~眾德營銷 沈陽盛和塾道盛組/稻芽七組 【知~學習】 誦...
    熊志軍閱讀 151評論 0 0