微信小程序云开发-树洞小程序Treehole(数据库环境介绍与登录)

新建云开发就不多说了,详见前面一个项目的开发环境介绍。

这次的树洞小程序,用到的功能比较多,需要记录也比较多,所以直接介绍一下我的数据组成。

以功能为出发点,来商讨一下需要多少张表来存储数据。

首先用户个人信息不用说①

广场发布的帖子(还有交易市场,两种帖子的细分属性不一样,所以建立多一站表比较容易管理)②③

点赞④⑤评论表⑥(参考相册项目的点赞表,为什么点赞表需要两张,一张是点赞记录,一张是意向购买记录,意向购买我们要在消息中使用)

伪聊天表⑦。

以上就是我们对这个项目主要做的一个细分做表。

接下来介绍一下,每张表所存储的数据格式:

①用户表的结构字段:

 

②③帖子表

点赞/意向购买④⑤表

评论表⑥

伪聊天表⑦。

以上,为数据库的主要组成,接下来做一个登录模块的介绍。

相比于之前的项目,这个项目做了一个伪加载的优化。

 第一个空页面,先判断是否登录过。FirstPage.js

const app=getApp()
Page({
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    if (!wx.cloud) {
      wx.showToast({
        title: '尚未登录',
        icon: 'none',
        duration: 1500
      })
      return
    }
    // 判断是否授权
    wx.getSetting({
      success: res => {
        //console.log(res.authSetting);
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像暱称,不会弹框
          wx.cloud.callFunction({
            name: 'login',
            data: {},
            success: res => {
              //console.log('[云函数] [login] user openid: ', res.result.openid)
              app.globalData.openid = res.result.openid
              wx.setStorageSync("myOpenId", res.result.openid);
              wx.getUserInfo({
                success: res => {
                  this.setData({
                    avatarUrl: res.userInfo.avatarUrl,
                    userInfo: res.userInfo
                  })
                  wx.setStorage({
                    key: "Userinfo",
                    data: this.data.userInfo
                  })
                  wx.setStorage({
                    key: "User_openid",
                    data: app.globalData.openid
                  })
                  
                  wx.switchTab({
                    url: '../Main_page/Main_page',
                  })
                }
              })

            },
            fail: err => {
              console.error('[云函数] [login] 调用失败', err)
              wx.showToast({
                title: '云函数:调用失败',
                icon: 'none',
                duration: 1500
              })
            }
          })

        }
        else{
          wx.redirectTo({
            url: '../Login/Login',
          })
        }
      }
    })

  },
})

 已授权,进入主页面。首次/未授权的,进入授权页面,新用户进入的话往数据库添加用户的数据:

Login.js

const app = getApp()
var template = require('../../template/template.js');
var util=require('../../utils/util.js');
Page({

  data: {
    avatarUrl: '',
    userInfo: {},
  },

onLoad: function () {
 
  },

  onGetOpenid: function (e)  {
    let that=this
    wx.getUserInfo({
      success: res => {
        this.setData({
          avatarUrl: res.userInfo.avatarUrl,
          userInfo: res.userInfo
        })
        wx.setStorage({
          key: "Userinfo",
          data: this.data.userInfo
        })
        // 调用云函数
        wx.cloud.callFunction({
          name: 'login',
          data: {},
          success: res => {

            console.log('[云函数] [login] user openid: ', res.result.openid)
            app.globalData.openid = res.result.openid

            wx.setStorageSync("myOpenId", res.result.openid);
            
            const db = wx.cloud.database({ env: 'textllinpro-5br77' })
            return db.collection('Assistant_User').add({ //添加人
              data: {
                Username: that.data.userInfo.nickName,
                Last_to_Reply: Date.now(),
                Last_toup_Time: Date.now(),
                User_head_url: that.data.userInfo.avatarUrl,
                Creat_user_Time: Date.now()
              }
            }).then(res => {
              console.log(res);
              wx.switchTab({
                url: '../Mine_page/Mine_page',
              })
            })  
          },
          fail: err => {
            console.error('[云函数] [login] 调用失败', err)
            wx.showToast({
              title: '云函数:调用失败',
              icon: 'none',
              duration: 1500
            })
          }
        })


      }
    })

  }
})

 Login.wxml


<import src="../../template/template.wxml"/><!--miniprogram/pages/sdsq/sdsq.wxml-->
<view class='main'>
  <view class='head'>
    <view class='ima'><image src='/images/sq.png'></image></view>
    <view class='lb'><label>小程序需要您的微信授权才能使用哦!</label></view>
  </view>
  <view class='body'>
    <view class='unlb'>
     <button open-type="getUserInfo" class='ubutton' bindgetuserinfo="onGetOpenid">微信登录授权</button>
    </view>
  </view>

</view>

登录这部分仍需要完善,因为如果我曾经授权登录之后,如果我取消的授权再次进入,用户的数据将会重复。这里还有待考虑,可以加一个判断,判断在用户表中是否存在Openid(唯一),再进行是否用户的创建。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章