1. 程式人生 > >用小程式·雲開發兩天搭建mini論壇丨實戰

用小程式·雲開發兩天搭建mini論壇丨實戰

筆者最近涉獵了小程式相關的知識,於是利用週末時間開發了一款類似於同事的小程式,深度體驗了小程式雲開發模式提供的雲函式、資料庫、儲存三大能力。關於雲開發,可參考文件:小程式·雲開發。

個人感覺雲開發帶來的最大好處是鑑權流程的簡化和對後端的弱化,所以像筆者這種從未接觸過小程式開發的人也能夠在週末兩天時間內開發出一個功能完備、體驗閉環的勉強能用的產品。

最後,本文並不是搬運官方文件,也不會詳細介紹開發工具和雲開發後臺的使用,所以建議結合上面給出文件連結一起消化本文。

功能分析

該小程式功能目前較為簡單(釋出帖子、瀏覽帖子、釋出評論),可用下圖表示,無需贅述:

由架構圖可知,雲開發的資料庫(存帖子、存評論)、儲存(圖片)、雲函式(讀、寫、更新資料庫等)都將涉及,很好地達到了練手的目的。

釋出帖子

如果帖子不帶圖片,直接寫資料庫即可,如果帶圖片則需要先存入圖片到雲開發提供的儲存中,拿到返回的fileId(可理解為圖片的url)再一併寫入資料庫,核心程式碼:

    for (let i = 0; i < img_url.length; i++) {
      var str = img_url[i];
      var obj = str.lastIndexOf("/");
      var fileName = str.substr(obj + 1)
      console.log(fileName)
      wx.cloud.uploadFile({
        cloudPath: 'post_images/' + fileName,//必須指定檔名,否則返回的檔案id不對
        filePath: img_url[i], // 小程式臨時檔案路徑
        success: res => {
          // get resource ID: 
          console.log(res)
          //把上傳成功的圖片的地址放入陣列中
          img_url_ok.push(res.fileID)
          //如果全部傳完,則可以將圖片路徑儲存到資料庫
          if (img_url_ok.length == img_url.length) {
            console.log(img_url_ok)
            that.publish(img_url_ok)
          }
        },
        fail: err => {
          // handle error
          console.log('fail: ' + err.errMsg)
        }
      })
    }  

通過img_url_ok.length == img_url.length我們確定所有圖片已經上傳完成並返回了對應的id,然後執行寫入資料庫的操作:


  /**
   * 執行釋出時圖片已經上傳完成,寫入資料庫的是圖片的fileId
   */
  publish: function(img_url_ok) {
    wx.cloud.init()
    wx.cloud.callFunction({
      name: 'publish_post',
      data: {
        openid: app.globalData.openId,// 這個雲端其實能直接拿到
        author_name: app.globalData.userInfo.nickName,
        content: this.data.content,
        image_url: img_url_ok,
        publish_time: "",
        update_time: ""//目前讓伺服器自己生成這兩個時間
      },
      success: function (res) {
        // 強制重新整理,這個傳參很粗暴
        var pages = getCurrentPages();             //  獲取頁面棧
        var prevPage = pages[pages.length - 2];    // 上一個頁面
        prevPage.setData({
          update: true
        })
        wx.hideLoading()
        wx.navigateBack({
          delta: 1
        })
      },
      fail: console.error
    })
  },

通過wx.cloud.callFunction我們呼叫了一個雲函式(通過name指定函式名),並將帖子內容content和圖片image_url以及其他資訊(釋出者暱稱、id等)一併傳到雲端。然後再看看這個雲函式:

exports.main = async (event, context) => {
  try {
    return await db.collection('post_collection').add({
      // data 欄位表示需新增的 JSON 資料
      data: {
        // 釋出時小程式傳入
        //author_id: event.openid,不要自己傳,用sdk自帶的
        author_id: event.userInfo.openId,
        author_name: event.author_name,
        content: event.content,
        image_url: event.image_url,
        // 伺服器時間和本地時間會造成什麼影響,需要評估
        publish_time: new Date(),
        // update_time: event.update_time,// 最近一次更新時間,釋出或者評論觸發更新,目前用伺服器端時間
        update_time: new Date(),
        // 預設值,一些目前還沒開發,所以沒設定
        // comment_count: 0,//評論數,直接讀資料庫,避免兩個資料表示同一含義
        watch_count: 3,//瀏覽數
        // star_count: 0,//TODO:收藏人數
      }
    })
  } catch (e) {
    console.error(e)
  }
}

可以看到,雲函式寫入了一條資料庫記錄,我們的引數通過event這個變數帶了進來。

獲取帖子列表

所謂獲取帖子列表其實就是讀上一節寫入的資料庫,但是我們並不需要全部資訊(例如圖片url),並且要求按照時間排序,如果熟悉資料庫的話,會發現這又是一條查詢語句罷了:

exports.main = async (event, context) => {
  return {
    postlist: await db.collection('post_collection').field({// 指定需要返回的欄位
      _id: true,
      author_name: true,
      content: true,
      title: true,
      watch_count: true
    }).orderBy('update_time', 'desc').get(),//指定排序依據

  }
}

瀏覽帖子內容

瀏覽帖子內容及給定一個帖子的id,由帖子列表點選時帶入:

  onItemClick: function (e) {
    console.log(e.currentTarget.dataset.postid)
    wx.navigateTo({
      url: '../postdetail/postdetail?postid=' + e.currentTarget.dataset.postid,
    })
  },

然後在雲函式中根據這個id拿到全部資料:

exports.main = async (event, context) => {
  
  return {
    postdetail: await db.collection('post_collection').where({
      _id: event.postid
    }).get(),
  }
}

拿到全部資料後,再根據圖片id去載入貼子的圖片:

    // 獲取內容
    wx.cloud.callFunction({
      // 雲函式名稱 
      name: 'get_post_detail',
      data: {
        postid: options.postid
      },
      success: function (res) {
        var postdetail = res.result.postdetail.data[0];
        that.setData({
          detail: postdetail,
          contentLoaded: true
        })
        that.downloadImages(postdetail.image_url)
      },
      fail: console.error
    })

這裡that.downloadImages(postdetail.image_url)即載入圖片:

  /**
   * 從資料庫獲取圖片的fileId,然後去雲端儲存下載,最後加載出來
   */
  downloadImages: function(image_urls){
    var that = this
    if(image_urls.length == 0){
      return
    } else {
      var urls = []
      for(let i = 0; i < image_urls.length; i++) {
        wx.cloud.downloadFile({
          fileID: image_urls[i],
          success: res => {
            // get temp file path
            console.log(res.tempFilePath)
            urls.push(res.tempFilePath)
            if (urls.length == image_urls.length) {
              console.log(urls)
              that.setData({
                imageUrls: urls,
                imagesLoaded: true
              })
            }
          },
          fail: err => {
            // handle error
          }
        })
      }
    }
  },

發表評論

發表評論和釋出帖子邏輯類似,只是寫入的資料不同,不做贅述。

總結

前面說過,雲開發弱化了後端(簡化鑑權本質也是弱化後端),這樣帶來的好處就是提高了開發效率,因為前後端聯調向來都是一件耗時間的事情,而且小程式本身主打的就
是小型應用,實在沒有必要引入過多的開發人員。但云開發也不是萬能的,例如我一開始想做RSS閱讀器,那麼後端就需要聚合資訊,目前雲開發還做不了。

個人感覺只要是資訊類的小程式,如新聞類、視訊類,雲開發目前都很乏力,因為資料庫的支援還過於簡陋(也可能是我太菜,沒發現很好的解決辦法,歡迎拍磚)。但如果是本文提及的這種使用者自己也會產生資訊的小程式,那麼雲開發則會有開發效率上的優勢。

最後就是雲開發目前提供的2G資料庫和5G儲存,對於一些使用者量較多的小程式是否足夠也是個問題,目前也沒見有付費版。

總的類說,初次接觸小程式開發,還是發現有不少值得借鑑學習之處。

原始碼連結

https://github.com/TencentCloudBase/Good-practice-tutorial-recommended

如果你有關於使用雲開發CloudBase相關的技術故事/技術實戰經驗想要跟大家分享,歡迎留言聯絡我們哦~比心!

相關推薦

程式&#183;開發搭建mini論壇實戰

筆者最近涉獵了小程式相關的知識,於是利用週末時間開發了一款類似於同事的小程式,深度體驗了小程式雲開發模式提供的雲函式、資料庫、儲存三大能力。關於雲開發,可參考文件:小程式·雲開發。 個人感覺雲開發帶來的最大好處是鑑權流程的簡化和對後端的弱化,所以像筆者這種從未接觸過小程式開發的人也能夠在週末兩天時間內開發出一

程式&#183;開發打造功能全面的部落格程式實戰

用小程式·雲開發將部落格小程式常用功能“一網打盡” 本文介紹mini部落格小程式的詳情頁的功能按鈕如何實現,具體包括評論、點贊、收藏和海報功能,這裡記錄下整個實現過程和實際編碼中的一些坑。 評論、點贊、收藏功能 實現思路 實現文章的一些操作功能,最主要的還是評論,這是作者和讀者之間溝通的橋樑,評論功能的衍

程式&#183;開發輕鬆構建二手書商城程式實戰

“拱手讓書,智慧相傳。本文將帶大家使用雲開發快速開發完整的校園二手書商城“ 導語 很多大學有個普遍現象,畢業或者搬校區的時候,成堆成堆的書都被隨便處理掉,作為過來人,每每想到都十分痛心可惜,而導致這種情況發生的原因,我認為主要還是歸結學校原因,一方面沒有提供靠譜便利的平臺,另一方面,宣傳不到位,基於此開發了

程式&#183;開發實戰 - 迷你微博

0. 前言 本文將手把手教你如何寫出迷你版微博的一行行程式碼,迷你版微博包含以下功能: Feed 流:關注動態、所有動態 傳送圖文動態 搜尋使用者 關注系統 點贊動態 個人主頁 使用到的雲開發能力: 雲資料庫 雲端儲存 雲函式 雲呼叫 沒錯,幾乎是所有的雲開發能力。也就是說,讀完這篇實戰,你就相當於完

程式&#183;開發實戰 - 體重記錄程式

前一段看到朋友圈裡總是有人用txt記錄體重,就特別想寫一個記錄體重的小程式, 現在小程式的雲開發有云函式、資料庫,真的挺好用,很適合個人開發者,伺服器域名什麼都不用管,雲開發讓你完全不用操心這些東西。 先看看頁面效果圖吧: 記錄的幾個點: 1.全域性變數 globalData 2.

程式&#183;開發實戰 - 校園約拍程式

創意來源於生活,之所以開發這個校園約拍小程式,是因為在攝影選修課上常聽老師抱怨外出寫生老找不到模特,許多大學生都想擁有一套專屬自己記憶的攝影作品,記錄下不會磨滅的美好回憶,可如何找到讓自己滿意的攝影師是他們的難題。悅拍屋是一個校園攝影o2o的約拍平臺,提供全方位的約拍服務,同時提供一個自我展示,學習交流,互動

基於程式&#183;開發構建高考查分程式實戰

2019高考報名人數達到了 1031 萬的新高,作為一名三年前參考高考的準程式猿,趕在高考前,加班加點從零開始做了一款高考查分小程式,算是一名老學長送給學弟學妹們的高考禮。上線僅 1 個月,使用者數就突破了 1k,關於小程式的介紹就不多說了,可以去搜【歷年高考分數線查詢】體驗,今天主要談談技術原理和實現細節。

程式&#183;開發地表最強CI利器來了

## 小程式CI 與 CloudBase-FrameWork 從2017年開始,微信小程式的能力也隨著前端的大發展的趨勢越來越多,包體積限制越來越寬鬆,大型微信小程式的開發團隊越來越多,為了適應形式,微信小程式官方團隊在2020年1月推出了官方CI工具,可以進行程式碼上傳、預覽、拉取關鍵資訊等操作,甚至還能

程序開發探秘:『 程序&#183;開發 』新功能“調”上手體驗

配置服務 ces 希望 data 消息 觸發 從數據 所有 tom 近期微信『 小程序·雲開發 』悄悄的上線了一個叫做“雲調用”的新功能。 從文檔上看,雲調用是基於雲函數使用小程序開放接口的能力,在雲函數中使用雲調用來調用服務端

微信程式開發·初探二

I’ll never finish falling in love with you. 自己編寫雲服務(後臺) 在目錄cloudfunctions上右鍵,新建node.js雲函式

Slog68_微信開發開啟全棧時代!(微信程式開發-全棧時代1)

ArthurSlog SLog-68 Year·1 Guangzhou·China Sep 11th 2018 常道無名 唯德以顯之 至德無本 順道而成之 禍福無門 惟人自召 善惡之報 如影隨形 開發環境MacOS(High Sierra 10.13.5)

Slog69_實現一個帶引數的函式GET!(微信程式開發-全棧時代2)

ArthurSlog SLog-69 Year·1 Guangzhou·China Sep 11th 2018 禍兮福之所倚 福兮禍之所伏 開發環境MacOS(High Sierra 10.13.5) 需要的資訊和資訊源: 前言 騰訊推出“雲開發”概

微信程式開發·初探

Good days give you happiness and bad days give you experience. 順境帶來快樂,逆境帶來成長。 雲開發 quickstart 這是雲開發的快速啟動指引,其中演示瞭如何上手使用雲開發的三大基

微信程式開發·初探四(資料庫操作)

The course of true love never did run smooth. 真愛無坦途。 新建集合 1.開啟雲開發控制檯,資料庫 2.新增集合users 新增程式碼

微信程式_開發

開發者可以使用雲開發開發微信小程式、小遊戲,無需搭建伺服器,即可使用雲端能力。 1 ##初建專案時,在開發者工具中沒有找到 “雲開發 QuickStart 專案”, 解決方法: 更新了微信開發者工具即可, 進入開發者工具 在左側頭部工具欄有 “雲開發”。

微信程式開發——模擬後臺增刪改查

小程式雲開發出來之後,小程式開發人員也要慢慢的接觸後端對資料的增刪改查了。下面就給大家提供一個案例吧。 這裡我把新增和修改放在了一個頁面      顯示頁面index.wxml <view wx:if="{{books}}" class='container

Slog71_選取、上傳和顯示本地圖片GET !(微信程式開發-全棧時代3)

ArthurSlog SLog-71 Year·1 Guangzhou·China Sep 12th 2018 道常無為而無不為 開發環境MacOS(High Sierra 10.13.5) 需要的資訊和資訊源: 前言 ”雲開發

微信程式開發·初探三(檔案操作)

We are the champion. We’ll keep on fighting till the end. 雲開發·檔案上傳 上傳檔案 在小程式端可呼叫 wx.cloud.uploadFile 方法進行上傳: wx.cloud.upl

微信程式--使用開發完成支付閉環

#### 微信小程式--使用雲開發完成支付閉環 #### 1.流程介紹 ![](https://img2020.cnblogs.com/blog/1141382/202102/1141382-20210201004552059-1922933214.png) ![](https://img2020.

破界!Omi生態omi-mp釋出,程式開發生成Web

omi-mp 是什麼 Omi 框架是微信支付線研發部和 AlloyTeam 開源的通用 Web 元件化框架,基於 Web Components,用來開發 PC、手機瀏覽器或者微信、手Q webview 的 Web 頁面。自今年5月開源以來,該專案共獲得 Star 數 5000+,擁有貢獻者29人。經過