成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用小程序·云開(kāi)發(fā)兩天搭建mini論壇丨實(shí)戰(zhàn)

沈建明 / 3784人閱讀

摘要:筆者最近涉獵了小程序相關(guān)的知識(shí),于是利用周末時(shí)間開(kāi)發(fā)了一款類似于同事的小程序,深度體驗(yàn)了小程序云開(kāi)發(fā)模式提供的云函數(shù)數(shù)據(jù)庫(kù)存儲(chǔ)三大能力。

筆者最近涉獵了小程序相關(guān)的知識(shí),于是利用周末時(shí)間開(kāi)發(fā)了一款類似于同事的小程序,深度體驗(yàn)了小程序云開(kāi)發(fā)模式提供的云函數(shù)、數(shù)據(jù)庫(kù)、存儲(chǔ)三大能力。關(guān)于云開(kāi)發(fā),可參考文檔:小程序·云開(kāi)發(fā)。

個(gè)人感覺(jué)云開(kāi)發(fā)帶來(lái)的最大好處是鑒權(quán)流程的簡(jiǎn)化和對(duì)后端的弱化,所以像筆者這種從未接觸過(guò)小程序開(kāi)發(fā)的人也能夠在周末兩天時(shí)間內(nèi)開(kāi)發(fā)出一個(gè)功能完備、體驗(yàn)閉環(huán)的勉強(qiáng)能用的產(chǎn)品。

最后,本文并不是搬運(yùn)官方文檔,也不會(huì)詳細(xì)介紹開(kāi)發(fā)工具和云開(kāi)發(fā)后臺(tái)的使用,所以建議結(jié)合上面給出文檔鏈接一起消化本文。

功能分析

該小程序功能目前較為簡(jiǎn)單(發(fā)布帖子、瀏覽帖子、發(fā)布評(píng)論),可用下圖表示,無(wú)需贅述:

由架構(gòu)圖可知,云開(kāi)發(fā)的數(shù)據(jù)庫(kù)(存帖子、存評(píng)論)、存儲(chǔ)(圖片)、云函數(shù)(讀、寫、更新數(shù)據(jù)庫(kù)等)都將涉及,很好地達(dá)到了練手的目的

發(fā)布帖子

如果帖子不帶圖片,直接寫數(shù)據(jù)庫(kù)即可,如果帶圖片則需要先存入圖片到云開(kāi)發(fā)提供的存儲(chǔ)中,拿到返回的fileId(可理解為圖片的url)再一并寫入數(shù)據(jù)庫(kù),核心代碼:

    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不對(duì)
        filePath: img_url[i], // 小程序臨時(shí)文件路徑
        success: res => {
          // get resource ID: 
          console.log(res)
          //把上傳成功的圖片的地址放入數(shù)組中
          img_url_ok.push(res.fileID)
          //如果全部傳完,則可以將圖片路徑保存到數(shù)據(jù)庫(kù)
          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)
        }
      })
    }  

通過(guò)img_url_ok.length == img_url.length我們確定所有圖片已經(jīng)上傳完成并返回了對(duì)應(yīng)的id,然后執(zhí)行寫入數(shù)據(jù)庫(kù)的操作:

  /**
   * 執(zhí)行發(fā)布時(shí)圖片已經(jīng)上傳完成,寫入數(shù)據(jù)庫(kù)的是圖片的fileId
   */
  publish: function(img_url_ok) {
    wx.cloud.init()
    wx.cloud.callFunction({
      name: "publish_post",
      data: {
        openid: app.globalData.openId,// 這個(gè)云端其實(shí)能直接拿到
        author_name: app.globalData.userInfo.nickName,
        content: this.data.content,
        image_url: img_url_ok,
        publish_time: "",
        update_time: ""http://目前讓服務(wù)器自己生成這兩個(gè)時(shí)間
      },
      success: function (res) {
        // 強(qiáng)制刷新,這個(gè)傳參很粗暴
        var pages = getCurrentPages();             //  獲取頁(yè)面棧
        var prevPage = pages[pages.length - 2];    // 上一個(gè)頁(yè)面
        prevPage.setData({
          update: true
        })
        wx.hideLoading()
        wx.navigateBack({
          delta: 1
        })
      },
      fail: console.error
    })
  },

通過(guò)wx.cloud.callFunction我們調(diào)用了一個(gè)云函數(shù)(通過(guò)name指定函數(shù)名),并將帖子內(nèi)容content和圖片image_url以及其他信息(發(fā)布者昵稱、id等)一并傳到云端。然后再看看這個(gè)云函數(shù):

exports.main = async (event, context) => {
  try {
    return await db.collection("post_collection").add({
      // data 字段表示需新增的 JSON 數(shù)據(jù)
      data: {
        // 發(fā)布時(shí)小程序傳入
        //author_id: event.openid,不要自己傳,用sdk自帶的
        author_id: event.userInfo.openId,
        author_name: event.author_name,
        content: event.content,
        image_url: event.image_url,
        // 服務(wù)器時(shí)間和本地時(shí)間會(huì)造成什么影響,需要評(píng)估
        publish_time: new Date(),
        // update_time: event.update_time,// 最近一次更新時(shí)間,發(fā)布或者評(píng)論觸發(fā)更新,目前用服務(wù)器端時(shí)間
        update_time: new Date(),
        // 默認(rèn)值,一些目前還沒(méi)開(kāi)發(fā),所以沒(méi)設(shè)置
        // comment_count: 0,//評(píng)論數(shù),直接讀數(shù)據(jù)庫(kù),避免兩個(gè)數(shù)據(jù)表示同一含義
        watch_count: 3,//瀏覽數(shù)
        // star_count: 0,//TODO:收藏人數(shù)
      }
    })
  } catch (e) {
    console.error(e)
  }
}

可以看到,云函數(shù)寫入了一條數(shù)據(jù)庫(kù)記錄,我們的參數(shù)通過(guò)event這個(gè)變量帶了進(jìn)來(lái)。

獲取帖子列表

所謂獲取帖子列表其實(shí)就是讀上一節(jié)寫入的數(shù)據(jù)庫(kù),但是我們并不需要全部信息(例如圖片url),并且要求按照時(shí)間排序,如果熟悉數(shù)據(jù)庫(kù)的話,會(huì)發(fā)現(xiàn)這又是一條查詢語(yǔ)句罷了:

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(),//指定排序依據(jù)

  }
}
瀏覽帖子內(nèi)容

瀏覽帖子內(nèi)容及給定一個(gè)帖子的id,由帖子列表點(diǎn)擊時(shí)帶入:

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

然后在云函數(shù)中根據(jù)這個(gè)id拿到全部數(shù)據(jù):

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

拿到全部數(shù)據(jù)后,再根據(jù)圖片id去加載貼子的圖片:

    // 獲取內(nèi)容
    wx.cloud.callFunction({
      // 云函數(shù)名稱 
      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)即加載圖片:

  /**
   * 從數(shù)據(jù)庫(kù)獲取圖片的fileId,然后去云存儲(chǔ)下載,最后加載出來(lái)
   */
  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
          }
        })
      }
    }
  },
發(fā)表評(píng)論

發(fā)表評(píng)論和發(fā)布帖子邏輯類似,只是寫入的數(shù)據(jù)不同,不做贅述。

總結(jié)

前面說(shuō)過(guò),云開(kāi)發(fā)弱化了后端(簡(jiǎn)化鑒權(quán)本質(zhì)也是弱化后端),這樣帶來(lái)的好處就是提高了開(kāi)發(fā)效率,因?yàn)榍昂蠖寺?lián)調(diào)向來(lái)都是一件耗時(shí)間的事情,而且小程序本身主打的就
是小型應(yīng)用,實(shí)在沒(méi)有必要引入過(guò)多的開(kāi)發(fā)人員。但云開(kāi)發(fā)也不是萬(wàn)能的,例如我一開(kāi)始想做RSS閱讀器,那么后端就需要聚合信息,目前云開(kāi)發(fā)還做不了。

個(gè)人感覺(jué)只要是信息類的小程序,如新聞?lì)?、視頻類,云開(kāi)發(fā)目前都很乏力,因?yàn)閿?shù)據(jù)庫(kù)的支持還過(guò)于簡(jiǎn)陋(也可能是我太菜,沒(méi)發(fā)現(xiàn)很好的解決辦法,歡迎拍磚)。但如果是本文提及的這種用戶自己也會(huì)產(chǎn)生信息的小程序,那么云開(kāi)發(fā)則會(huì)有開(kāi)發(fā)效率上的優(yōu)勢(shì)。

最后就是云開(kāi)發(fā)目前提供的2G數(shù)據(jù)庫(kù)和5G存儲(chǔ),對(duì)于一些用戶量較多的小程序是否足夠也是個(gè)問(wèn)題,目前也沒(méi)見(jiàn)有付費(fèi)版。

總的類說(shuō),初次接觸小程序開(kāi)發(fā),還是發(fā)現(xiàn)有不少值得借鑒學(xué)習(xí)之處。

源碼鏈接

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

如果你有關(guān)于使用云開(kāi)發(fā)CloudBase相關(guān)的技術(shù)故事/技術(shù)實(shí)戰(zhàn)經(jīng)驗(yàn)想要跟大家分享,歡迎留言聯(lián)系我們哦~比心!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106909.html

相關(guān)文章

  • 用小程序·開(kāi)發(fā)打造功能全面的博客小程序實(shí)戰(zhàn)

    摘要:用小程序云開(kāi)發(fā)將博客小程序常用功能一網(wǎng)打盡本文介紹博客小程序的詳情頁(yè)的功能按鈕如何實(shí)現(xiàn),具體包括評(píng)論點(diǎn)贊收藏和海報(bào)功能,這里記錄下整個(gè)實(shí)現(xiàn)過(guò)程和實(shí)際編碼中的一些坑。考慮到小程序本身的大小限制,使用的方式是最佳的。 用小程序·云開(kāi)發(fā)將博客小程序常用功能一網(wǎng)打盡 本文介紹mini博客小程序的詳情頁(yè)的功能按鈕如何實(shí)現(xiàn),具體包括評(píng)論、點(diǎn)贊、收藏和海報(bào)功能,這里記錄下整個(gè)實(shí)現(xiàn)過(guò)程和實(shí)際編碼中的一...

    cc17 評(píng)論0 收藏0
  • 用小程序·開(kāi)發(fā)打造功能全面的博客小程序實(shí)戰(zhàn)

    摘要:用小程序云開(kāi)發(fā)將博客小程序常用功能一網(wǎng)打盡本文介紹博客小程序的詳情頁(yè)的功能按鈕如何實(shí)現(xiàn),具體包括評(píng)論點(diǎn)贊收藏和海報(bào)功能,這里記錄下整個(gè)實(shí)現(xiàn)過(guò)程和實(shí)際編碼中的一些坑??紤]到小程序本身的大小限制,使用的方式是最佳的。 用小程序·云開(kāi)發(fā)將博客小程序常用功能一網(wǎng)打盡 本文介紹mini博客小程序的詳情頁(yè)的功能按鈕如何實(shí)現(xiàn),具體包括評(píng)論、點(diǎn)贊、收藏和海報(bào)功能,這里記錄下整個(gè)實(shí)現(xiàn)過(guò)程和實(shí)際編碼中的一...

    flybywind 評(píng)論0 收藏0
  • 用小程序·開(kāi)發(fā)實(shí)現(xiàn)郵件發(fā)送功能實(shí)戰(zhàn)

    摘要:七調(diào)用云函數(shù)發(fā)送郵件我們?cè)谖募飳懸粋€(gè)按鈕,當(dāng)點(diǎn)擊這個(gè)按鈕時(shí)就發(fā)送郵件。到這里我們就完整的實(shí)現(xiàn)了微信小程序云開(kāi)發(fā)使用云函數(shù)發(fā)送郵件的功能了。 先看效果圖: showImg(https://segmentfault.com/img/remote/1460000020151412); 通過(guò)上面的日志,可以看出我們是158開(kāi)頭的郵箱給250開(kāi)頭的郵箱發(fā)送郵件,下面是成功接收到的郵件。 sho...

    sixgo 評(píng)論0 收藏0
  • 10行代碼實(shí)現(xiàn)小程序支付功能!實(shí)戰(zhàn)

    摘要:前面給大家講過(guò)一個(gè)借助小程序云開(kāi)發(fā)實(shí)現(xiàn)微信支付的,但是那個(gè)操作稍微有點(diǎn)繁瑣,并且還會(huì)經(jīng)常出現(xiàn)問(wèn)題,今天就給大家講一個(gè)簡(jiǎn)單的,并且借助官方支付實(shí)現(xiàn)小程序支付功能。只需要一個(gè)簡(jiǎn)單的云函數(shù),就可以輕松的實(shí)現(xiàn)微信小程序支付功能。 前面給大家講過(guò)一個(gè)借助小程序云開(kāi)發(fā)實(shí)現(xiàn)微信支付的,但是那個(gè)操作稍微有點(diǎn)繁瑣,并且還會(huì)經(jīng)常出現(xiàn)問(wèn)題,今天就給大家講一個(gè)簡(jiǎn)單的,并且借助官方支付api實(shí)現(xiàn)小程序支付功能。...

    SimpleTriangle 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<