微信小程序雲開發-樹洞小程序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(唯一),再進行是否用戶的創建。

 

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