新建雲開發就不多說了,詳見前面一個項目的開發環境介紹。
這次的樹洞小程序,用到的功能比較多,需要記錄也比較多,所以直接介紹一下我的數據組成。
以功能爲出發點,來商討一下需要多少張表來存儲數據。
首先用戶個人信息不用說①
廣場發佈的帖子(還有交易市場,兩種帖子的細分屬性不一樣,所以建立多一站表比較容易管理)②③
點贊④⑤評論表⑥(參考相冊項目的點贊表,爲什麼點贊表需要兩張,一張是點贊記錄,一張是意向購買記錄,意向購買我們要在消息中使用)
僞聊天表⑦。
以上就是我們對這個項目主要做的一個細分做表。
接下來介紹一下,每張表所存儲的數據格式:
①用戶表的結構字段:
②③帖子表
點贊/意向購買④⑤表
評論表⑥
僞聊天表⑦。
以上,爲數據庫的主要組成,接下來做一個登錄模塊的介紹。
相比於之前的項目,這個項目做了一個僞加載的優化。
第一個空頁面,先判斷是否登錄過。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(唯一),再進行是否用戶的創建。