1. 程式人生 > >小程式學習筆記 -- 收藏, 點贊功能

小程式學習筆記 -- 收藏, 點贊功能

目前很多的視訊或文章下面可以收藏點贊等

按照一般的邏輯來說: 

點贊可以不用登陸, 這樣方便遊客點贊, 但是呢只能點一次贊

收藏則需要登陸, 因為每個人的收藏內容是不相同的, 只有從收藏夾中才能看到自己收藏了哪些內容

點贊分析: 

小程式如果沒有登陸, 那麼怎麼區分使用者是不是同一個呢

之前我想到使用ip來區分, 但是我並不知道ip能不能重複

而且不同的微訊號登陸同一部手機(當然這種情況很少), 那ip是相同的啊

我只是希望一個微訊號一天只能點一次贊而已

在沒有登陸的情況下, 我可以獲取微信使用者的頭像地址, 使用它來區分使用者

我認為頭像地址是不會重複的, 因為頭像地址是由使用者上傳一個url, url應該是不會重複的

wx.getUserInfo({
    success: function(res) {
        var userInfo = res.userInfo
        var nickName = userInfo.nickName
        var avatarUrl = userInfo.avatarUrl
        var gender = userInfo.gender //性別 0:未知、1:男、2:女
        var province = userInfo.province
        var city = userInfo.city
        var country = userInfo.country
    }
})

我把頭像url儲存起來, 請求開發者伺服器時帶上它

// 點贊
praise: function(e) {
    var th = this;
    wx.getUserInfo({
      success: function(res) {
        wx.setStorageSync("avatar_url", res.userInfo.avatarUrl);
      }
    });
    wx.request({
      url: app.globalData.preFixedUrl + "praise",
      data: {
        "videoId": 10
      },
      header: {
        "praise": wx.getStorageSync("avatar_url")
      }
    });
  },

收收藏分析:

收藏分兩步, 使用者收藏和用記檢視收藏夾

使用者先登陸, 登陸後就好辦了, 因為登陸後有openid(微信使用者標識)

/**收藏功能*/
collect: function() {
    // 先從儲存中獲取openid
    var openid = wx.getStorageSync("openid");
    
    if (openid == null) {   // 如果沒有openid, 則去登陸
      // 登陸
      wx.login({
        success: function(res) {
          if (res.code) {
            //發起網路請求
            wx.request({
              url: app.globalData.preFixedUrl + 'openidLogin',
              data: {
                code: res.code
              },
              success: res => {
                var openid = res.data;
                wx.setStorageSync("openid", openid); // 登陸成功後儲存openid
              }
            })
          } else {
            console.log('登入失敗!' + res.errMsg)
          }
        }
      });
    } else {   // 否則直接收藏
      wx.request({
        url: app.globalData.preFixedUrl + 'videoCollect',
        data: {
          "openid": openid,    // 哪個使用者收藏, 開發者伺服器中將openid儲存
          "videoId": 10        // 需要收藏的內容的id
        },
        success: function(e) {
          console.log(e.data);
        }
      })
    }
  },

檢視收藏夾分析:

也就是根據使用者(openid)查詢它所收藏的內容

當然一般是要分類查詢的, 比如收藏的視訊, 收藏的文章

但總的來說就是查詢資料表吧

select video from collect where openid=xxx

select artical from collect where openid=xxx

// 同樣先檢查是否登陸(未登陸則執行登陸)

// 是登陸狀態後, 傳送請求就可以了
wx.request({
    url: app.globalData.preFixedUrl + 'getCollectVideo',
    data: {
      "type": "artical"
      "openid": openid
    },
    success: function(e) {
      console.log(e);
    }
  })

像登陸這種操作, 是多次用到, 建議建立js, 將登陸操作封裝為函式

注: 上述登陸操作僅是邏輯示例(登陸成功後, 後臺一般不直接返回openid, 而是返回openid相關的session標識)