小程序学习笔记 -- 收藏, 点赞功能

目前很多的视频或文章下面可以收藏点赞等

按照一般的逻辑来说: 

点赞可以不用登陆, 这样方便游客点赞, 但是呢只能点一次赞

收藏则需要登陆, 因为每个人的收藏内容是不相同的, 只有从收藏夹中才能看到自己收藏了哪些内容

点赞分析: 

小程序如果没有登陆, 那么怎么区分用户是不是同一个呢

之前我想到使用ip来区分, 但是我并不知道ip能不能重复

而且不同的微信号登陆同一部手机(当然这种情况很少), 那ip是相同的啊

我只是希望一个微信号一天只能点一次赞而已, 以 微信号 区分

在没有登陆的情况下, 我们可以获取微信用户的头像地址, 使用它来区分用户

我认为头像地址是不会重复的, 因为头像地址是由用户上传生成的一个url, url应该是不会重复的

获取微信头像地址(avatarUrl ):

wx.getUserInfo({
    success: function(res) {
        var userInfo = res.userInfo
        var nickName = userInfo.nickName
        var avatarUrl = userInfo.avatarUrl
        var gender = userInfo.gender 
        var province = userInfo.province
        var city = userInfo.city
        var country = userInfo.country
    }
})

获取头像url,  请求开发者服务器时带上它

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

收收藏分析:

收藏分两步, 用户收藏和用记查看收藏夹

用户先登陆, 登陆后就好办了, 因为登陆后有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;    // 仅示例, 后台一般不直接返回openid, 而是以openid生成的session标识
                wx.setStorageSync("openid", openid); // 仅为示例, 一般是从session标识中分离出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: {
      "openid": openid
    },
    success: function(e) {
      console.log(e);
    }
  })

像登陆这种操作, 是多次用到, 建议创建js, 将登陆操作封装为函数

注: 上述登陆操作仅是逻辑示例(登陆成功后, 后台一般不直接返回openid, 而是返回openid相关的session标识) 

登陆详情操作可见: https://blog.csdn.net/lljxk2008/article/details/82286031(有后端代码)

猜你喜欢

转载自blog.csdn.net/lljxk2008/article/details/82796439