之前寫了一篇文章介紹如何使用雲開發來實現一個社區 Demo: 微信小程序~雲開發的實現的一個社區 Demo(完結~)
得到很多小夥伴的認可但也出現了一些問題。
主要問題有:
- 發佈的圖片不顯示,跨端發佈的圖片不顯示
- 點贊功能優化
- 數據庫不清晰
- 需要添加回復功能
針對以上問題,我將代碼更新了,地址在:dongxi346/doughnut ,在README
中有使用介紹,或者接着往下看。
ps:有幫助的朋友幫忙點個 star
多謝了。
這次更新主要是:
- 解決以上出現的問題
- 優化代碼結構
圖片問題原因分析
看過我源碼的朋友,應該知道,我當時存的是wx.chooseImage API
返回的臨時圖片鏈接,當時爲了方便就直接這麼搞了。
但是既然是臨時圖片肯定會有失效的時候,而且跨端發佈的圖片也有問題(這裏指電腦上發佈和手機上發佈的圖片只能在各自端顯示)
根據開發習慣,我們肯定應該先將圖片上傳到服務器,服務器返回圖片鏈接後將這個圖片鏈接到數據庫中,雲開發這裏也提供了文件存儲功能,所以我們只需要做三步就能解決這個圖片問題。
第一步:
在選擇完圖片後,將臨時圖片鏈接保存好
第二步:
在要提交到數據庫的時候依次將圖片上傳到服務器獲取圖片鏈接
第三步:
將發佈的數據存儲到雲數據庫
我這裏爲了方便,直接將第一二步合併了,僞代碼如下:
chooseImage: function(event) {
wx.chooseImage({
count: 6,
success: function(res) {
// 設置圖片
that.setData({
images: res.tempFilePaths,
})
// 這裏清空一下,否則會出現圖片上傳重複問題
that.data.images = []
console.log(res.tempFilePaths)
for (var i in res.tempFilePaths) {
// 將圖片上傳至雲存儲空間
wx.cloud.uploadFile({
// 指定要上傳的文件的小程序臨時文件路徑
cloudPath: that.timetostr(new Date()),
filePath: res.tempFilePaths[i],
// 成功回調
success: res => {
// 獲取到服務器圖片鏈接地址
that.data.images.push(res.fileID)
},
})
}
},
})
},
/**
* 圖片路徑格式化
*/
timetostr(time){
var randnum = Math.floor(Math.random() * (9999 - 1000)) + 1000;
var str = randnum +"_"+ time.getMilliseconds() + ".png";
return str;
},
第三步就是數據庫的添加操作了,圖片字段直接存that.data.images
的值就行了
點贊功能優化
原因主要是之前的數據庫設計不清晰,點贊應該放在單獨的一個數據庫表中,不應該依賴於文章。
實現的過程可參考源碼 文章詳情源碼
數據庫不清晰
原因主要是剛開始實現這個 Demo 沒想那麼細,只想到實現功能了,數據表的設計不夠仔細。數據庫設計這塊的知識我也是外行,目前我的設計思路是表結構儘可能的單一。
可查看 項目 README 中的使用介紹
添加回復功能
社區 Demo 沒有回覆功能也說不過去,所以簡單加上了,UI 很醜,但是基本實現了簡單的回覆功能
實現的過程可參考源碼 回覆功能源碼